
        (function($) {
                $.ui = {
                        plugin: {
                                add: function(module, option, set) {
                                        var proto = $.ui[module].prototype;
                                        for (var i in set) {
                                                proto.plugins[i] = proto.plugins[i] || [];
                                                proto.plugins[i].push([option, set[i]]);
                                        }
                                },
                                call: function(instance, name, args) {
                                        var set = instance.plugins[name];
                                        if (!set) {
                                                return;
                                        }
                                        for (var i = 0; i < set.length; i++) {
                                                if (instance.options[set[i][0]]) {
                                                        set[i][1].apply(instance.element, args);
                                                }
                                        }
                                }
                        },
                        cssCache: {},
                        css: function(name) {
                                if ($.ui.cssCache[name]) {
                                        return $.ui.cssCache[name];
                                }
                                var tmp = $('<div class="ui-gen">').addClass(name).css({
                                        position: 'absolute',
                                        top: '-5000px',
                                        left: '-5000px',
                                        display: 'block'
                                }).appendTo('body');
                                $.ui.cssCache[name] = !!((!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) || !(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor'))));
                                try {
                                        $('body').get(0).removeChild(tmp.get(0));
                                } catch(e) {}
                                return $.ui.cssCache[name];
                        },
                        disableSelection: function(el) {
                                $(el).attr('unselectable', 'on').css('MozUserSelect', 'none');
                        },
                        enableSelection: function(el) {
                                $(el).attr('unselectable', 'off').css('MozUserSelect', '');
                        },
                        hasScroll: function(e, a) {
                                var scroll = /top/.test(a || "top") ? 'scrollTop' : 'scrollLeft',
                                has = false;
                                if (e[scroll] > 0) return true;
                                e[scroll] = 1;
                                has = e[scroll] > 0 ? true : false;
                                e[scroll] = 0;
                                return has;
                        }
                };
                var _remove = $.fn.remove;
                $.fn.remove = function() {
                        $("*", this).add(this).triggerHandler("remove");
                        return _remove.apply(this, arguments);
                };

                function getter(namespace, plugin, method) {
                        var methods = $[namespace][plugin].getter || [];
                        methods = (typeof methods == "string" ? methods.split(/,?\s+/) : methods);
                        return ($.inArray(method, methods) != -1);
                }
                $.widget = function(name, prototype) {
                        var namespace = name.split(".")[0];
                        name = name.split(".")[1];
                        $.fn[name] = function(options) {
                                var isMethodCall = (typeof options == 'string'),
                                        args = Array.prototype.slice.call(arguments, 1);
                                if (isMethodCall && getter(namespace, name, options)) {
                                        var instance = $.data(this[0], name);
                                        return (instance ? instance[options].apply(instance, args) : undefined);
                                }
                                return this.each(function() {
                                        var instance = $.data(this, name);
                                        if (isMethodCall && instance && $.isFunction(instance[options])) {
                                                instance[options].apply(instance, args);
                                        } else if (!isMethodCall) {
                                                $.data(this, name, new $[namespace][name](this, options));
                                        }
                                });
                        };
                        $[namespace][name] = function(element, options) {
                                var self = this;
                                this.widgetName = name;
                                this.widgetBaseClass = namespace + '-' + name;
                                this.options = $.extend({},
                                $.widget.defaults, $[namespace][name].defaults, options);
                                this.element = $(element).bind('setData.' + name, function(e, key, value) {
                                        return self.setData(key, value);
                                }).bind('getData.' + name, function(e, key) {
                                        return self.getData(key);
                                }).bind('remove', function() {
                                        return self.destroy();
                                });
                                this.init();
                        };
                        $[namespace][name].prototype = $.extend({},
                        $.widget.prototype, prototype);
                };
                $.widget.prototype = {
                        init: function() {},
                        destroy: function() {
                                this.element.removeData(this.widgetName);
                        },
                        getData: function(key) {
                                return this.options[key];
                        },
                        setData: function(key, value) {
                                this.options[key] = value;
                                if (key == 'disabled') {
                                        this.element[value ? 'addClass' : 'removeClass'](this.widgetBaseClass + '-disabled');
                                }
                        },
                        enable: function() {
                                this.setData('disabled', false);
                        },
                        disable: function() {
                                this.setData('disabled', true);
                        }
                };
                $.widget.defaults = {
                        disabled: false
                };
                $.ui.mouse = {
                        mouseInit: function() {
                                var self = this;
                                this.element.bind('mousedown.' + this.widgetName, function(e) {
                                        return self.mouseDown(e);
                                });
                                if ($.browser.msie) {
                                        this._mouseUnselectable = this.element.attr('unselectable');
                                        this.element.attr('unselectable', 'on');
                                }
                                this.started = false;
                        },
                        mouseDestroy: function() {
                                this.element.unbind('.' + this.widgetName);
                                ($.browser.msie && this.element.attr('unselectable', this._mouseUnselectable));
                        },
                        mouseDown: function(e) {
                                (this._mouseStarted && this.mouseUp(e));
                                this._mouseDownEvent = e;
                                var self = this,
                                        btnIsLeft = (e.which == 1),
                                        elIsCancel = (typeof this.options.cancel == "string" ? $(e.target).parents().add(e.target).filter(this.options.cancel).length : false);
                                if (!btnIsLeft || elIsCancel || !this.mouseCapture(e)) {
                                        return true;
                                }
                                this._mouseDelayMet = !this.options.delay;
                                if (!this._mouseDelayMet) {
                                        this._mouseDelayTimer = setTimeout(function() {
                                                self._mouseDelayMet = true;
                                        },
                                        this.options.delay);
                                }
                                if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) {
                                        this._mouseStarted = (this.mouseStart(e) !== false);
                                        if (!this._mouseStarted) {
                                                e.preventDefault();
                                                return true;
                                        }
                                }
                                this._mouseMoveDelegate = function(e) {
                                        return self.mouseMove(e);
                                };
                                this._mouseUpDelegate = function(e) {
                                        return self.mouseUp(e);
                                };
                                $(document).bind('mousemove.' + this.widgetName, this._mouseMoveDelegate).bind('mouseup.' + this.widgetName, this._mouseUpDelegate);
                                return false;
                        },
                        mouseMove: function(e) {
                                if ($.browser.msie && !e.button) {
                                        return this.mouseUp(e);
                                }
                                if (this._mouseStarted) {
                                        this.mouseDrag(e);
                                        return false;
                                }
                                if (this.mouseDistanceMet(e) && this.mouseDelayMet(e)) {
                                        this._mouseStarted = (this.mouseStart(this._mouseDownEvent, e) !== false);
                                        (this._mouseStarted ? this.mouseDrag(e) : this.mouseUp(e));
                                }
                                return !this._mouseStarted;
                        },
                        mouseUp: function(e) {
                                $(document).unbind('mousemove.' + this.widgetName, this._mouseMoveDelegate).unbind('mouseup.' + this.widgetName, this._mouseUpDelegate);
                                if (this._mouseStarted) {
                                        this._mouseStarted = false;
                                        this.mouseStop(e);
                                }
                                return false;
                        },
                        mouseDistanceMet: function(e) {
                                return (Math.max(Math.abs(this._mouseDownEvent.pageX - e.pageX), Math.abs(this._mouseDownEvent.pageY - e.pageY)) >= this.options.distance);
                        },
                        mouseDelayMet: function(e) {
                                return this._mouseDelayMet;
                        },
                        mouseStart: function(e) {},
                        mouseDrag: function(e) {},
                        mouseStop: function(e) {},
                        mouseCapture: function(e) {
                                return true;
                        }
                };
                $.ui.mouse.defaults = {
                        cancel: null,
                        distance: 1,
                        delay: 0
                };
        })(jQuery);
        (function($) {
                $.widget("ui.draggable", $.extend({},
                $.ui.mouse, {
                        init: function() {
                                var o = this.options;
                                if (o.helper == 'original' && !(/(relative|absolute|fixed)/).test(this.element.css('position'))) this.element.css('position', 'relative');
                                this.element.addClass('ui-draggable');
                                (o.disabled && this.element.addClass('ui-draggable-disabled'));
                                this.mouseInit();
                        },
                        mouseStart: function(e) {
                                var o = this.options;
                                if (this.helper || o.disabled || $(e.target).is('.ui-resizable-handle')) return false;
                                var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
                                $(this.options.handle, this.element).find("*").andSelf().each(function() {
                                        if (this == e.target) handle = true;
                                });
                                if (!handle) return false;
                                if ($.ui.ddmanager) $.ui.ddmanager.current = this;
                                this.helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [e])) : (o.helper == 'clone' ? this.element.clone() : this.element);
                                if (!this.helper.parents('body').length) this.helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
                                if (this.helper[0] != this.element[0] && !(/(fixed|absolute)/).test(this.helper.css("position"))) this.helper.css("position", "absolute");
                                this.margins = {
                                        left: (parseInt(this.element.css("marginLeft"), 10) || 0),
                                        top: (parseInt(this.element.css("marginTop"), 10) || 0)
                                };
                                this.cssPosition = this.helper.css("position");
                                this.offset = this.element.offset();
                                this.offset = {
                                        top: this.offset.top - this.margins.top,
                                        left: this.offset.left - this.margins.left
                                };
                                this.offset.click = {
                                        left: e.pageX - this.offset.left,
                                        top: e.pageY - this.offset.top
                                };
                                this.offsetParent = this.helper.offsetParent();
                                var po = this.offsetParent.offset();
                                if (this.offsetParent[0] == document.body && $.browser.mozilla) po = {
                                        top: 0,
                                        left: 0
                                };
                                this.offset.parent = {
                                        top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                                        left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
                                };
                                var p = this.element.position();
                                this.offset.relative = this.cssPosition == "relative" ? {
                                        top: p.top - (parseInt(this.helper.css("top"), 10) || 0) + this.offsetParent[0].scrollTop,
                                        left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + this.offsetParent[0].scrollLeft
                                } : {
                                        top: 0,
                                        left: 0
                                };
                                this.originalPosition = this.generatePosition(e);
                                this.helperProportions = {
                                        width: this.helper.outerWidth(),
                                        height: this.helper.outerHeight()
                                };
                                if (o.cursorAt) {
                                        if (o.cursorAt.left != undefined) this.offset.click.left = o.cursorAt.left + this.margins.left;
                                        if (o.cursorAt.right != undefined) this.offset.click.left = this.helperProportions.width - o.cursorAt.right + this.margins.left;
                                        if (o.cursorAt.top != undefined) this.offset.click.top = o.cursorAt.top + this.margins.top;
                                        if (o.cursorAt.bottom != undefined) this.offset.click.top = this.helperProportions.height - o.cursorAt.bottom + this.margins.top;
                                }
                                if (o.containment) {
                                        if (o.containment == 'parent') o.containment = this.helper[0].parentNode;
                                        if (o.containment == 'document' || o.containment == 'window') this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, $(o.containment == 'document' ? document : window).width() - this.offset.relative.left - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.element.css("marginRight"), 10) || 0), ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.offset.relative.top - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.element.css("marginBottom"), 10) || 0)];
                                        if (! (/^(document|window|parent)$/).test(o.containment)) {
                                                var ce = $(o.containment)[0];
                                                var co = $(o.containment).offset();
                                                this.containment = [co.left + (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - this.offset.relative.left - this.offset.parent.left, co.top + (parseInt($(ce).css("borderTopWidth"), 10) || 0) - this.offset.relative.top - this.offset.parent.top, co.left + Math.max(ce.scrollWidth, ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - this.offset.relative.left - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.element.css("marginRight"), 10) || 0), co.top + Math.max(ce.scrollHeight, ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - this.offset.relative.top - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.element.css("marginBottom"), 10) || 0)];
                                        }
                                }
                                this.propagate("start", e);
                                this.helperProportions = {
                                        width: this.helper.outerWidth(),
                                        height: this.helper.outerHeight()
                                };
                                if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, e);
                                this.helper.addClass("ui-draggable-dragging");
                                this.mouseDrag(e);
                                return true;
                        },
                        convertPositionTo: function(d, pos) {
                                if (!pos) pos = this.position;
                                var mod = d == "absolute" ? 1 : -1;
                                return {
                                        top: (pos.top + this.offset.relative.top * mod + this.offset.parent.top * mod - (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollTop) * mod + (this.cssPosition == "fixed" ? $(document).scrollTop() : 0) * mod + this.margins.top * mod),
                                        left: (pos.left + this.offset.relative.left * mod + this.offset.parent.left * mod - (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollLeft) * mod + (this.cssPosition == "fixed" ? $(document).scrollLeft() : 0) * mod + this.margins.left * mod)
                                };
                        },
                        generatePosition: function(e) {
                                var o = this.options;
                                var position = {
                                        top: (e.pageY - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollTop) - (this.cssPosition == "fixed" ? $(document).scrollTop() : 0)),
                                        left: (e.pageX - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + (this.cssPosition == "fixed" || (this.cssPosition == "absolute" && this.offsetParent[0] == document.body) ? 0 : this.offsetParent[0].scrollLeft) - (this.cssPosition == "fixed" ? $(document).scrollLeft() : 0))
                                };
                                if (!this.originalPosition) return position;
                                if (this.containment) {
                                        if (position.left < this.containment[0]) position.left = this.containment[0];
                                        if (position.top < this.containment[1]) position.top = this.containment[1];
                                        if (position.left > this.containment[2]) position.left = this.containment[2];
                                        if (position.top > this.containment[3]) position.top = this.containment[3];
                                }
                                if (o.grid) {
                                        var top = this.originalPosition.top + Math.round((position.top - this.originalPosition.top) / o.grid[1]) * o.grid[1];
                                        position.top = this.containment ? (!(top < this.containment[1] || top > this.containment[3]) ? top : (!(top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
                                        var left = this.originalPosition.left + Math.round((position.left - this.originalPosition.left) / o.grid[0]) * o.grid[0];
                                        position.left = this.containment ? (!(left < this.containment[0] || left > this.containment[2]) ? left : (!(left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
                                }
                                return position;
                        },
                        mouseDrag: function(e) {
                                this.position = this.generatePosition(e);
                                this.positionAbs = this.convertPositionTo("absolute");
                                this.position = this.propagate("drag", e) || this.position;
                                if (!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left + 'px';
                                if (!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top + 'px';
                                if ($.ui.ddmanager) $.ui.ddmanager.drag(this, e);
                                return false;
                        },
                        mouseStop: function(e) {
                                var dropped = false;
                                if ($.ui.ddmanager && !this.options.dropBehaviour) var dropped = $.ui.ddmanager.drop(this, e);
                                if ((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true) {
                                        var self = this;
                                        $(this.helper).animate(this.originalPosition, parseInt(this.options.revert, 10) || 500, function() {
                                                self.propagate("stop", e);
                                                self.clear();
                                        });
                                } else {
                                        this.propagate("stop", e);
                                        this.clear();
                                }
                                return false;
                        },
                        clear: function() {
                                this.helper.removeClass("ui-draggable-dragging");
                                if (this.options.helper != 'original' && !this.cancelHelperRemoval) this.helper.remove();
                                this.helper = null;
                                this.cancelHelperRemoval = false;
                        },
                        plugins: {},
                        uiHash: function(e) {
                                return {
                                        helper: this.helper,
                                        position: this.position,
                                        absolutePosition: this.positionAbs,
                                        options: this.options
                                };
                        },
                        propagate: function(n, e) {
                                $.ui.plugin.call(this, n, [e, this.uiHash()]);
                                if (n == "drag") this.positionAbs = this.convertPositionTo("absolute");
                                return this.element.triggerHandler(n == "drag" ? n : "drag" + n, [e, this.uiHash()], this.options[n]);
                        },
                        destroy: function() {
                                if (!this.element.data('draggable')) return;
                                this.element.removeData("draggable").unbind(".draggable").removeClass('ui-draggable');
                                this.mouseDestroy();
                        }
                }));
                $.extend($.ui.draggable, {
                        defaults: {
                                appendTo: "parent",
                                axis: false,
                                cancel: ":input",
                                delay: 0,
                                distance: 1,
                                helper: "original"
                        }
                });
                $.ui.plugin.add("draggable", "cursor", {
                        start: function(e, ui) {
                                var t = $('body');
                                if (t.css("cursor")) ui.options._cursor = t.css("cursor");
                                t.css("cursor", ui.options.cursor);
                        },
                        stop: function(e, ui) {
                                if (ui.options._cursor) $('body').css("cursor", ui.options._cursor);
                        }
                });
                $.ui.plugin.add("draggable", "zIndex", {
                        start: function(e, ui) {
                                var t = $(ui.helper);
                                if (t.css("zIndex")) ui.options._zIndex = t.css("zIndex");
                                t.css('zIndex', ui.options.zIndex);
                        },
                        stop: function(e, ui) {
                                if (ui.options._zIndex) $(ui.helper).css('zIndex', ui.options._zIndex);
                        }
                });
                $.ui.plugin.add("draggable", "opacity", {
                        start: function(e, ui) {
                                var t = $(ui.helper);
                                if (t.css("opacity")) ui.options._opacity = t.css("opacity");
                                t.css('opacity', ui.options.opacity);
                        },
                        stop: function(e, ui) {
                                if (ui.options._opacity) $(ui.helper).css('opacity', ui.options._opacity);
                        }
                });
                $.ui.plugin.add("draggable", "iframeFix", {
                        start: function(e, ui) {
                                $(ui.options.iframeFix === true ? "iframe" : ui.options.iframeFix).each(function() {
                                        $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({
                                                width: this.offsetWidth + "px",
                                                height: this.offsetHeight + "px",
                                                position: "absolute",
                                                opacity: "0.001",
                                                zIndex: 1000
                                        }).css($(this).offset()).appendTo("body");
                                });
                        },
                        stop: function(e, ui) {
                                $("div.DragDropIframeFix").each(function() {
                                        this.parentNode.removeChild(this);
                                });
                        }
                });
                $.ui.plugin.add("draggable", "scroll", {
                        start: function(e, ui) {
                                var o = ui.options;
                                var i = $(this).data("draggable");
                                o.scrollSensitivity = o.scrollSensitivity || 20;
                                o.scrollSpeed = o.scrollSpeed || 20;
                                i.overflowY = function(el) {
                                        do {
                                                if (/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-y'))) return el;
                                                el = el.parent();
                                        } while (el[0].parentNode);
                                        return $(document);
                                } (this);
                                i.overflowX = function(el) {
                                        do {
                                                if (/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-x'))) return el;
                                                el = el.parent();
                                        } while (el[0].parentNode);
                                        return $(document);
                                } (this);
                                if (i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') i.overflowYOffset = i.overflowY.offset();
                                if (i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') i.overflowXOffset = i.overflowX.offset();
                        },
                        drag: function(e, ui) {
                                var o = ui.options;
                                var i = $(this).data("draggable");
                                if (i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') {
                                        if ((i.overflowYOffset.top + i.overflowY[0].offsetHeight) - e.pageY < o.scrollSensitivity) i.overflowY[0].scrollTop = i.overflowY[0].scrollTop + o.scrollSpeed;
                                        if (e.pageY - i.overflowYOffset.top < o.scrollSensitivity) i.overflowY[0].scrollTop = i.overflowY[0].scrollTop - o.scrollSpeed;
                                } else {
                                        if (e.pageY - $(document).scrollTop() < o.scrollSensitivity) $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
                                        if ($(window).height() - (e.pageY - $(document).scrollTop()) < o.scrollSensitivity) $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
                                }
                                if (i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') {
                                        if ((i.overflowXOffset.left + i.overflowX[0].offsetWidth) - e.pageX < o.scrollSensitivity) i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft + o.scrollSpeed;
                                        if (e.pageX - i.overflowXOffset.left < o.scrollSensitivity) i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft - o.scrollSpeed;
                                } else {
                                        if (e.pageX - $(document).scrollLeft() < o.scrollSensitivity) $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
                                        if ($(window).width() - (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity) $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
                                }
                        }
                });
                $.ui.plugin.add("draggable", "snap", {
                        start: function(e, ui) {
                                var inst = $(this).data("draggable");
                                inst.snapElements = [];
                                $(ui.options.snap === true ? '.ui-draggable' : ui.options.snap).each(function() {
                                        var $t = $(this);
                                        var $o = $t.offset();
                                        if (this != inst.element[0]) inst.snapElements.push({
                                                item: this,
                                                width: $t.outerWidth(),
                                                height: $t.outerHeight(),
                                                top: $o.top,
                                                left: $o.left
                                        });
                                });
                        },
                        drag: function(e, ui) {
                                var inst = $(this).data("draggable");
                                var d = ui.options.snapTolerance || 20;
                                var x1 = ui.absolutePosition.left,
                                        x2 = x1 + inst.helperProportions.width,
                                        y1 = ui.absolutePosition.top,
                                        y2 = y1 + inst.helperProportions.height;
                                for (var i = inst.snapElements.length - 1; i >= 0; i--) {
                                        var l = inst.snapElements[i].left,
                                                r = l + inst.snapElements[i].width,
                                                t = inst.snapElements[i].top,
                                                b = t + inst.snapElements[i].height;
                                        if (! ((l - d < x1 && x1 < r + d && t - d < y1 && y1 < b + d) || (l - d < x1 && x1 < r + d && t - d < y2 && y2 < b + d) || (l - d < x2 && x2 < r + d && t - d < y1 && y1 < b + d) || (l - d < x2 && x2 < r + d && t - d < y2 && y2 < b + d))) continue;
                                        if (ui.options.snapMode != 'inner') {
                                                var ts = Math.abs(t - y2) <= 20;
                                                var bs = Math.abs(b - y1) <= 20;
                                                var ls = Math.abs(l - x2) <= 20;
                                                var rs = Math.abs(r - x1) <= 20;
                                                if (ts) ui.position.top = inst.convertPositionTo("relative", {
                                                        top: t - inst.helperProportions.height,
                                                        left: 0
                                                }).top;
                                                if (bs) ui.position.top = inst.convertPositionTo("relative", {
                                                        top: b,
                                                        left: 0
                                                }).top;
                                                if (ls) ui.position.left = inst.convertPositionTo("relative", {
                                                        top: 0,
                                                        left: l - inst.helperProportions.width
                                                }).left;
                                                if (rs) ui.position.left = inst.convertPositionTo("relative", {
                                                        top: 0,
                                                        left: r
                                                }).left;
                                        }
                                        if (ui.options.snapMode != 'outer') {
                                                var ts = Math.abs(t - y1) <= 20;
                                                var bs = Math.abs(b - y2) <= 20;
                                                var ls = Math.abs(l - x1) <= 20;
                                                var rs = Math.abs(r - x2) <= 20;
                                                if (ts) ui.position.top = inst.convertPositionTo("relative", {
                                                        top: t,
                                                        left: 0
                                                }).top;
                                                if (bs) ui.position.top = inst.convertPositionTo("relative", {
                                                        top: b - inst.helperProportions.height,
                                                        left: 0
                                                }).top;
                                                if (ls) ui.position.left = inst.convertPositionTo("relative", {
                                                        top: 0,
                                                        left: l
                                                }).left;
                                                if (rs) ui.position.left = inst.convertPositionTo("relative", {
                                                        top: 0,
                                                        left: r - inst.helperProportions.width
                                                }).left;
                                        }
                                };
                        }
                });
                $.ui.plugin.add("draggable", "connectToSortable", {
                        start: function(e, ui) {
                                var inst = $(this).data("draggable");
                                inst.sortables = [];
                                $(ui.options.connectToSortable).each(function() {
                                        if ($.data(this, 'sortable')) {
                                                var sortable = $.data(this, 'sortable');
                                                inst.sortables.push({
                                                        instance: sortable,
                                                        shouldRevert: sortable.options.revert
                                                });
                                                sortable.refreshItems();
                                                sortable.propagate("activate", e, inst);
                                        }
                                });
                        },
                        stop: function(e, ui) {
                                var inst = $(this).data("draggable");
                                $.each(inst.sortables, function() {
                                        if (this.instance.isOver) {
                                                this.instance.isOver = 0;
                                                inst.cancelHelperRemoval = true;
                                                this.instance.cancelHelperRemoval = false;
                                                if (this.shouldRevert) this.instance.options.revert = true;
                                                this.instance.mouseStop(e);
                                                this.instance.element.triggerHandler("sortreceive", [e, $.extend(this.instance.ui(), {
                                                        sender: inst.element
                                                })], this.instance.options["receive"]);
                                                this.instance.options.helper = this.instance.options._helper;
                                        } else {
                                                this.instance.propagate("deactivate", e, inst);
                                        }
                                });
                        },
                        drag: function(e, ui) {
                                var inst = $(this).data("draggable"),
                                        self = this;
                                var checkPos = function(o) {
                                        var l = o.left,
                                                r = l + o.width,
                                                t = o.top,
                                                b = t + o.height;
                                        return (l < (this.positionAbs.left + this.offset.click.left) && (this.positionAbs.left + this.offset.click.left) < r && t < (this.positionAbs.top + this.offset.click.top) && (this.positionAbs.top + this.offset.click.top) < b);
                                };
                                $.each(inst.sortables, function(i) {
                                        if (checkPos.call(inst, this.instance.containerCache)) {
                                                if (!this.instance.isOver) {
                                                        this.instance.isOver = 1;
                                                        this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true);
                                                        this.instance.options._helper = this.instance.options.helper;
                                                        this.instance.options.helper = function() {
                                                                return ui.helper[0];
                                                        };
                                                        e.target = this.instance.currentItem[0];
                                                        this.instance.mouseCapture(e, true);
                                                        this.instance.mouseStart(e, true, true);
                                                        this.instance.offset.click.top = inst.offset.click.top;
                                                        this.instance.offset.click.left = inst.offset.click.left;
                                                        this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
                                                        this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
                                                        inst.propagate("toSortable", e);
                                                }
                                                if (this.instance.currentItem) this.instance.mouseDrag(e);
                                        } else {
                                                if (this.instance.isOver) {
                                                        this.instance.isOver = 0;
                                                        this.instance.cancelHelperRemoval = true;
                                                        this.instance.options.revert = false;
                                                        this.instance.mouseStop(e, true);
                                                        this.instance.options.helper = this.instance.options._helper;
                                                        this.instance.currentItem.remove();
                                                        if (this.instance.placeholder) this.instance.placeholder.remove();
                                                        inst.propagate("fromSortable", e);
                                                }
                                        };
                                });
                        }
                });
                $.ui.plugin.add("draggable", "stack", {
                        start: function(e, ui) {
                                var group = $.makeArray($(ui.options.stack.group)).sort(function(a, b) {
                                        return (parseInt($(a).css("zIndex"), 10) || ui.options.stack.min) - (parseInt($(b).css("zIndex"), 10) || ui.options.stack.min);
                                });
                                $(group).each(function(i) {
                                        this.style.zIndex = ui.options.stack.min + i;
                                });
                                this[0].style.zIndex = ui.options.stack.min + group.length;
                        }
                });
        })(jQuery);
        (function($) {
                $.widget("ui.droppable", {
                        init: function() {
                                this.element.addClass("ui-droppable");
                                this.isover = 0;
                                this.isout = 1;
                                var o = this.options,
                                        accept = o.accept;
                                o = $.extend(o, {
                                        accept: o.accept && o.accept.constructor == Function ? o.accept : function(d) {
                                                return $(d).is(accept);
                                        }
                                });
                                this.proportions = {
                                        width: this.element[0].offsetWidth,
                                        height: this.element[0].offsetHeight
                                };
                                $.ui.ddmanager.droppables.push(this);
                        },
                        plugins: {},
                        ui: function(c) {
                                return {
                                        draggable: (c.currentItem || c.element),
                                        helper: c.helper,
                                        position: c.position,
                                        absolutePosition: c.positionAbs,
                                        options: this.options,
                                        element: this.element
                                };
                        },
                        destroy: function() {
                                var drop = $.ui.ddmanager.droppables;
                                for (var i = 0; i < drop.length; i++)
                                if (drop[i] == this) drop.splice(i, 1);
                                this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");
                        },
                        over: function(e) {
                                var draggable = $.ui.ddmanager.current;
                                if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return;
                                if (this.options.accept.call(this.element, (draggable.currentItem || draggable.element))) {
                                        $.ui.plugin.call(this, 'over', [e, this.ui(draggable)]);
                                        this.element.triggerHandler("dropover", [e, this.ui(draggable)], this.options.over);
                                }
                        },
                        out: function(e) {
                                var draggable = $.ui.ddmanager.current;
                                if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return;
                                if (this.options.accept.call(this.element, (draggable.currentItem || draggable.element))) {
                                        $.ui.plugin.call(this, 'out', [e, this.ui(draggable)]);
                                        this.element.triggerHandler("dropout", [e, this.ui(draggable)], this.options.out);
                                }
                        },
                        drop: function(e, custom) {
                                var draggable = custom || $.ui.ddmanager.current;
                                if (!draggable || (draggable.currentItem || draggable.element)[0] == this.element[0]) return false;
                                var childrenIntersection = false;
                                this.element.find(".ui-droppable").not(".ui-draggable-dragging").each(function() {
                                        var inst = $.data(this, 'droppable');
                                        if (inst.options.greedy && $.ui.intersect(draggable, $.extend(inst, {
                                                offset: inst.element.offset()
                                        }), inst.options.tolerance)) {
                                                childrenIntersection = true;
                                                return false;
                                        }
                                });
                                if (childrenIntersection) return false;
                                if (this.options.accept.call(this.element, (draggable.currentItem || draggable.element))) {
                                        $.ui.plugin.call(this, 'drop', [e, this.ui(draggable)]);
                                        this.element.triggerHandler("drop", [e, this.ui(draggable)], this.options.drop);
                                        return true;
                                }
                                return false;
                        },
                        activate: function(e) {
                                var draggable = $.ui.ddmanager.current;
                                $.ui.plugin.call(this, 'activate', [e, this.ui(draggable)]);
                                if (draggable) this.element.triggerHandler("dropactivate", [e, this.ui(draggable)], this.options.activate);
                        },
                        deactivate: function(e) {
                                var draggable = $.ui.ddmanager.current;
                                $.ui.plugin.call(this, 'deactivate', [e, this.ui(draggable)]);
                                if (draggable) this.element.triggerHandler("dropdeactivate", [e, this.ui(draggable)], this.options.deactivate);
                        }
                });
                $.extend($.ui.droppable, {
                        defaults: {
                                disabled: false,
                                tolerance: 'intersect'
                        }
                });
                $.ui.intersect = function(draggable, droppable, toleranceMode) {
                        if (!droppable.offset) return false;
                        var x1 = (draggable.positionAbs || draggable.position.absolute).left,
                                x2 = x1 + draggable.helperProportions.width,
                                y1 = (draggable.positionAbs || draggable.position.absolute).top,
                                y2 = y1 + draggable.helperProportions.height;
                        var l = droppable.offset.left,
                                r = l + droppable.proportions.width,
                                t = droppable.offset.top,
                                b = t + droppable.proportions.height;
                        switch (toleranceMode) {
                        case 'fit':
                                return (l < x1 && x2 < r && t < y1 && y2 < b);
                                break;
                        case 'intersect':
                                return (l < x1 + (draggable.helperProportions.width / 2) && x2 - (draggable.helperProportions.width / 2) < r && t < y1 + (draggable.helperProportions.height / 2) && y2 - (draggable.helperProportions.height / 2) < b);
                                break;
                        case 'pointer':
                                return (l < ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left) && ((draggable.positionAbs || draggable.position.absolute).left + (draggable.clickOffset || draggable.offset.click).left) < r && t < ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top) && ((draggable.positionAbs || draggable.position.absolute).top + (draggable.clickOffset || draggable.offset.click).top) < b);
                                break;
                        case 'touch':
                                return ((y1 >= t && y1 <= b) || (y2 >= t && y2 <= b) || (y1 < t && y2 > b)) && ((x1 >= l && x1 <= r) || (x2 >= l && x2 <= r) || (x1 < l && x2 > r));
                                break;
                        default:
                                return false;
                                break;
                        }
                };
                $.ui.ddmanager = {
                        current: null,
                        droppables: [],
                        prepareOffsets: function(t, e) {
                                var m = $.ui.ddmanager.droppables;
                                var type = e ? e.type : null;
                                for (var i = 0; i < m.length; i++) {
                                        if (m[i].options.disabled || (t && !m[i].options.accept.call(m[i].element, (t.currentItem || t.element)))) continue;
                                        m[i].visible = m[i].element.css("display") != "none";
                                        if (!m[i].visible) continue;
                                        m[i].offset = m[i].element.offset();
                                        m[i].proportions = {
                                                width: m[i].element[0].offsetWidth,
                                                height: m[i].element[0].offsetHeight
                                        };
                                        if (type == "dragstart" || type == "sortactivate") m[i].activate.call(m[i], e);
                                }
                        },
                        drop: function(draggable, e) {
                                var dropped = false;
                                $.each($.ui.ddmanager.droppables, function() {
                                        if (!this.options) return;
                                        if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance)) dropped = this.drop.call(this, e);
                                        if (!this.options.disabled && this.visible && this.options.accept.call(this.element, (draggable.currentItem || draggable.element))) {
                                                this.isout = 1;
                                                this.isover = 0;
                                                this.deactivate.call(this, e);
                                        }
                                });
                                return dropped;
                        },
                        drag: function(draggable, e) {
                                if (draggable.options.refreshPositions) $.ui.ddmanager.prepareOffsets(draggable, e);
                                $.each($.ui.ddmanager.droppables, function() {
                                        if (this.options.disabled || this.greedyChild || !this.visible) return;
                                        var intersects = $.ui.intersect(draggable, this, this.options.tolerance);
                                        var c = !intersects && this.isover == 1 ? 'isout' : (intersects && this.isover == 0 ? 'isover' : null);
                                        if (!c) return;
                                        var parentInstance;
                                        if (this.options.greedy) {
                                                var parent = this.element.parents('.ui-droppable:eq(0)');
                                                if (parent.length) {
                                                        parentInstance = $.data(parent[0], 'droppable');
                                                        parentInstance.greedyChild = (c == 'isover' ? 1 : 0);
                                                }
                                        }
                                        if (parentInstance && c == 'isover') {
                                                parentInstance['isover'] = 0;
                                                parentInstance['isout'] = 1;
                                                parentInstance.out.call(parentInstance, e);
                                        }
                                        this[c] = 1;
                                        this[c == 'isout' ? 'isover' : 'isout'] = 0;
                                        this[c == "isover" ? "over" : "out"].call(this, e);
                                        if (parentInstance && c == 'isout') {
                                                parentInstance['isout'] = 0;
                                                parentInstance['isover'] = 1;
                                                parentInstance.over.call(parentInstance, e);
                                        }
                                });
                        }
                };
                $.ui.plugin.add("droppable", "activeClass", {
                        activate: function(e, ui) {
                                $(this).addClass(ui.options.activeClass);
                        },
                        deactivate: function(e, ui) {
                                $(this).removeClass(ui.options.activeClass);
                        },
                        drop: function(e, ui) {
                                $(this).removeClass(ui.options.activeClass);
                        }
                });
                $.ui.plugin.add("droppable", "hoverClass", {
                        over: function(e, ui) {
                                $(this).addClass(ui.options.hoverClass);
                        },
                        out: function(e, ui) {
                                $(this).removeClass(ui.options.hoverClass);
                        },
                        drop: function(e, ui) {
                                $(this).removeClass(ui.options.hoverClass);
                        }
                });
        })(jQuery);
        (function($) {
                $.widget("ui.resizable", $.extend({},
                $.ui.mouse, {
                        init: function() {
                                var self = this,
                                        o = this.options;
                                var elpos = this.element.css('position');
                                this.originalElement = this.element;
                                this.element.addClass("ui-resizable").css({
                                        position: /static/.test(elpos) ? 'relative' : elpos
                                });
                                $.extend(o, {
                                        _aspectRatio: !!(o.aspectRatio),
                                        helper: o.helper || o.ghost || o.animate ? o.helper || 'proxy' : null,
                                        knobHandles: o.knobHandles === true ? 'ui-resizable-knob-handle' : o.knobHandles
                                });
                                var aBorder = '1px solid #DEDEDE';
                                o.defaultTheme = {
                                        'ui-resizable': {
                                                display: 'block'
                                        },
                                        'ui-resizable-handle': {
                                                position: 'absolute',
                                                background: '#F2F2F2',
                                                fontSize: '0.1px'
                                        },
                                        'ui-resizable-n': {
                                                cursor: 'n-resize',
                                                height: '4px',
                                                left: '0px',
                                                right: '0px',
                                                borderTop: aBorder
                                        },
                                        'ui-resizable-s': {
                                                cursor: 's-resize',
                                                height: '4px',
                                                left: '0px',
                                                right: '0px',
                                                borderBottom: aBorder
                                        },
                                        'ui-resizable-e': {
                                                cursor: 'e-resize',
                                                width: '4px',
                                                top: '0px',
                                                bottom: '0px',
                                                borderRight: aBorder
                                        },
                                        'ui-resizable-w': {
                                                cursor: 'w-resize',
                                                width: '4px',
                                                top: '0px',
                                                bottom: '0px',
                                                borderLeft: aBorder
                                        },
                                        'ui-resizable-se': {
                                                cursor: 'se-resize',
                                                width: '4px',
                                                height: '4px',
                                                borderRight: aBorder,
                                                borderBottom: aBorder
                                        },
                                        'ui-resizable-sw': {
                                                cursor: 'sw-resize',
                                                width: '4px',
                                                height: '4px',
                                                borderBottom: aBorder,
                                                borderLeft: aBorder
                                        },
                                        'ui-resizable-ne': {
                                                cursor: 'ne-resize',
                                                width: '4px',
                                                height: '4px',
                                                borderRight: aBorder,
                                                borderTop: aBorder
                                        },
                                        'ui-resizable-nw': {
                                                cursor: 'nw-resize',
                                                width: '4px',
                                                height: '4px',
                                                borderLeft: aBorder,
                                                borderTop: aBorder
                                        }
                                };
                                o.knobTheme = {
                                        'ui-resizable-handle': {
                                                background: '#F2F2F2',
                                                border: '1px solid #808080',
                                                height: '8px',
                                                width: '8px'
                                        },
                                        'ui-resizable-n': {
                                                cursor: 'n-resize',
                                                top: '0px',
                                                left: '45%'
                                        },
                                        'ui-resizable-s': {
                                                cursor: 's-resize',
                                                bottom: '0px',
                                                left: '45%'
                                        },
                                        'ui-resizable-e': {
                                                cursor: 'e-resize',
                                                right: '0px',
                                                top: '45%'
                                        },
                                        'ui-resizable-w': {
                                                cursor: 'w-resize',
                                                left: '0px',
                                                top: '45%'
                                        },
                                        'ui-resizable-se': {
                                                cursor: 'se-resize',
                                                right: '0px',
                                                bottom: '0px'
                                        },
                                        'ui-resizable-sw': {
                                                cursor: 'sw-resize',
                                                left: '0px',
                                                bottom: '0px'
                                        },
                                        'ui-resizable-nw': {
                                                cursor: 'nw-resize',
                                                left: '0px',
                                                top: '0px'
                                        },
                                        'ui-resizable-ne': {
                                                cursor: 'ne-resize',
                                                right: '0px',
                                                top: '0px'
                                        }
                                };
                                o._nodeName = this.element[0].nodeName;
                                if (o._nodeName.match(/canvas|textarea|input|select|button|img/i)) {
                                        var el = this.element;
                                        if (/relative/.test(el.css('position')) && $.browser.opera) el.css({
                                                position: 'relative',
                                                top: 'auto',
                                                left: 'auto'
                                        });
                                        el.wrap($('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({
                                                position: el.css('position'),
                                                width: el.outerWidth(),
                                                height: el.outerHeight(),
                                                top: el.css('top'),
                                                left: el.css('left')
                                        }));
                                        var oel = this.element;
                                        this.element = this.element.parent();
                                        this.element.data('resizable', this);
                                        this.element.css({
                                                marginLeft: oel.css("marginLeft"),
                                                marginTop: oel.css("marginTop"),
                                                marginRight: oel.css("marginRight"),
                                                marginBottom: oel.css("marginBottom")
                                        });
                                        oel.css({
                                                marginLeft: 0,
                                                marginTop: 0,
                                                marginRight: 0,
                                                marginBottom: 0
                                        });
                                        if ($.browser.safari && o.preventDefault) oel.css('resize', 'none');
                                        o.proportionallyResize = oel.css({
                                                position: 'static',
                                                zoom: 1,
                                                display: 'block'
                                        });
                                        this.element.css({
                                                margin: oel.css('margin')
                                        });
                                        this._proportionallyResize();
                                }
                                if (!o.handles) o.handles = !$('.ui-resizable-handle', this.element).length ? "e,s,se" : {
                                        n: '.ui-resizable-n',
                                        e: '.ui-resizable-e',
                                        s: '.ui-resizable-s',
                                        w: '.ui-resizable-w',
                                        se: '.ui-resizable-se',
                                        sw: '.ui-resizable-sw',
                                        ne: '.ui-resizable-ne',
                                        nw: '.ui-resizable-nw'
                                };
                                if (o.handles.constructor == String) {
                                        o.zIndex = o.zIndex || 1000;
                                        if (o.handles == 'all') o.handles = 'n,e,s,w,se,sw,ne,nw';
                                        var n = o.handles.split(",");
                                        o.handles = {};
                                        var insertionsDefault = {
                                                handle: 'position: absolute; display: none; overflow:hidden;',
                                                n: 'top: 0pt; width:100%;',
                                                e: 'right: 0pt; height:100%;',
                                                s: 'bottom: 0pt; width:100%;',
                                                w: 'left: 0pt; height:100%;',
                                                se: 'bottom: 0pt; right: 0px;',
                                                sw: 'bottom: 0pt; left: 0px;',
                                                ne: 'top: 0pt; right: 0px;',
                                                nw: 'top: 0pt; left: 0px;'
                                        };
                                        for (var i = 0; i < n.length; i++) {
                                                var handle = $.trim(n[i]),
                                                        dt = o.defaultTheme,
                                                        hname = 'ui-resizable-' + handle,
                                                        loadDefault = !$.ui.css(hname) && !o.knobHandles,
                                                        userKnobClass = $.ui.css('ui-resizable-knob-handle'),
                                                        allDefTheme = $.extend(dt[hname], dt['ui-resizable-handle']),
                                                        allKnobTheme = $.extend(o.knobTheme[hname], !userKnobClass ? o.knobTheme['ui-resizable-handle'] : {});
                                                var applyZIndex = /sw|se|ne|nw/.test(handle) ? {
                                                        zIndex: ++o.zIndex
                                                } : {};
                                                var defCss = (loadDefault ? insertionsDefault[handle] : ''),
                                                        axis = $(['<div class="ui-resizable-handle ', hname, '" style="', defCss, insertionsDefault.handle, '"></div>'].join('')).css(applyZIndex);
                                                o.handles[handle] = '.ui-resizable-' + handle;
                                                this.element.append(axis.css(loadDefault ? allDefTheme : {}).css(o.knobHandles ? allKnobTheme : {}).addClass(o.knobHandles ? 'ui-resizable-knob-handle' : '').addClass(o.knobHandles));
                                        }
                                        if (o.knobHandles) this.element.addClass('ui-resizable-knob').css(!$.ui.css('ui-resizable-knob') ? {} : {});
                                }
                                this._renderAxis = function(target) {
                                        target = target || this.element;
                                        for (var i in o.handles) {
                                                if (o.handles[i].constructor == String) o.handles[i] = $(o.handles[i], this.element).show();
                                                if (o.transparent) o.handles[i].css({
                                                        opacity: 0
                                                });
                                                if (this.element.is('.ui-wrapper') && o._nodeName.match(/textarea|input|select|button/i)) {
                                                        var axis = $(o.handles[i], this.element),
                                                                padWrapper = 0;
                                                        padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
                                                        var padPos = ['padding', /ne|nw|n/.test(i) ? 'Top' : /se|sw|s/.test(i) ? 'Bottom' : /^e$/.test(i) ? 'Right' : 'Left'].join("");
                                                        if (!o.transparent) target.css(padPos, padWrapper);
                                                        this._proportionallyResize();
                                                }
                                                if (!$(o.handles[i]).length) continue;
                                        }
                                };
                                this._renderAxis(this.element);
                                o._handles = $('.ui-resizable-handle', self.element);
                                if (o.disableSelection) o._handles.each(function(i, e) {
                                        $.ui.disableSelection(e);
                                });
                                o._handles.mouseover(function() {
                                        if (!o.resizing) {
                                                if (this.className) var axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
                                                self.axis = o.axis = axis && axis[1] ? axis[1] : 'se';
                                        }
                                });
                                if (o.autoHide) {
                                        o._handles.hide();
                                        $(self.element).addClass("ui-resizable-autohide").hover(function() {
                                                $(this).removeClass("ui-resizable-autohide");
                                                o._handles.show();
                                        },
                                        function() {
                                                if (!o.resizing) {
                                                        $(this).addClass("ui-resizable-autohide");
                                                        o._handles.hide();
                                                }
                                        });
                                }
                                this.mouseInit();
                        },
                        plugins: {},
                        ui: function() {
                                return {
                                        originalElement: this.originalElement,
                                        element: this.element,
                                        helper: this.helper,
                                        position: this.position,
                                        size: this.size,
                                        options: this.options,
                                        originalSize: this.originalSize,
                                        originalPosition: this.originalPosition
                                };
                        },
                        propagate: function(n, e) {
                                $.ui.plugin.call(this, n, [e, this.ui()]);
                                if (n != "resize") this.element.triggerHandler(["resize", n].join(""), [e, this.ui()], this.options[n]);
                        },
                        destroy: function() {
                                var el = this.element,
                                        wrapped = el.children(".ui-resizable").get(0);
                                this.mouseDestroy();
                                var _destroy = function(exp) {
                                        $(exp).removeClass("ui-resizable ui-resizable-disabled").removeData("resizable").unbind(".resizable").find('.ui-resizable-handle').remove();
                                };
                                _destroy(el);
                                if (el.is('.ui-wrapper') && wrapped) {
                                        el.parent().append($(wrapped).css({
                                                position: el.css('position'),
                                                width: el.outerWidth(),
                                                height: el.outerHeight(),
                                                top: el.css('top'),
                                                left: el.css('left')
                                        })).end().remove();
                                        _destroy(wrapped);
                                }
                        },
                        mouseStart: function(e) {
                                if (this.options.disabled) return false;
                                var handle = false;
                                for (var i in this.options.handles) {
                                        if ($(this.options.handles[i])[0] == e.target) handle = true;
                                }
                                if (!handle) return false;
                                var o = this.options,
                                        iniPos = this.element.position(),
                                        el = this.element,
                                        num = function(v) {
                                        return parseInt(v, 10) || 0;
                                },
                                        ie6 = $.browser.msie && $.browser.version < 7;
                                o.resizing = true;
                                o.documentScroll = {
                                        top: $(document).scrollTop(),
                                        left: $(document).scrollLeft()
                                };
                                if (el.is('.ui-draggable') || (/absolute/).test(el.css('position'))) {
                                        var sOffset = $.browser.msie && !o.containment && (/absolute/).test(el.css('position')) && !(/relative/).test(el.parent().css('position'));
                                        var dscrollt = sOffset ? o.documentScroll.top : 0,
                                        dscrolll = sOffset ? o.documentScroll.left : 0;
                                        el.css({
                                                position: 'absolute',
                                                top: (iniPos.top + dscrollt),
                                                left: (iniPos.left + dscrolll)
                                        });
                                }
                                if ($.browser.opera && /relative/.test(el.css('position'))) el.css({
                                        position: 'relative',
                                        top: 'auto',
                                        left: 'auto'
                                });
                                this._renderProxy();
                                var curleft = num(this.helper.css('left')),
                                        curtop = num(this.helper.css('top'));
                                if (o.containment) {
                                        curleft += $(o.containment).scrollLeft() || 0;
                                        curtop += $(o.containment).scrollTop() || 0;
                                }
                                this.offset = this.helper.offset();
                                this.position = {
                                        left: curleft,
                                        top: curtop
                                };
                                this.size = o.helper || ie6 ? {
                                        width: el.outerWidth(),
                                        height: el.outerHeight()
                                } : {
                                        width: el.width(),
                                        height: el.height()
                                };
                                this.originalSize = o.helper || ie6 ? {
                                        width: el.outerWidth(),
                                        height: el.outerHeight()
                                } : {
                                        width: el.width(),
                                        height: el.height()
                                };
                                this.originalPosition = {
                                        left: curleft,
                                        top: curtop
                                };
                                this.sizeDiff = {
                                        width: el.outerWidth() - el.width(),
                                        height: el.outerHeight() - el.height()
                                };
                                this.originalMousePosition = {
                                        left: e.pageX,
                                        top: e.pageY
                                };
                                o.aspectRatio = (typeof o.aspectRatio == 'number') ? o.aspectRatio : ((this.originalSize.height / this.originalSize.width) || 1);
                                if (o.preserveCursor) $('body').css('cursor', this.axis + '-resize');
                                this.propagate("start", e);
                                return true;
                        },
                        mouseDrag: function(e) {
                                var el = this.helper,
                                        o = this.options,
                                        props = {},
                                        self = this,
                                        smp = this.originalMousePosition,
                                        a = this.axis;
                                var dx = (e.pageX - smp.left) || 0,
                                        dy = (e.pageY - smp.top) || 0;
                                var trigger = this._change[a];
                                if (!trigger) return false;
                                var data = trigger.apply(this, [e, dx, dy]),
                                        ie6 = $.browser.msie && $.browser.version < 7,
                                        csdif = this.sizeDiff;
                                if (o._aspectRatio || e.shiftKey) data = this._updateRatio(data, e);
                                data = this._respectSize(data, e);
                                this.propagate("resize", e);
                                el.css({
                                        top: this.position.top + "px",
                                        left: this.position.left + "px",
                                        width: this.size.width + "px",
                                        height: this.size.height + "px"
                                });
                                if (!o.helper && o.proportionallyResize) this._proportionallyResize();
                                this._updateCache(data);
                                this.element.triggerHandler("resize", [e, this.ui()], this.options["resize"]);
                                return false;
                        },
                        mouseStop: function(e) {
                                this.options.resizing = false;
                                var o = this.options,
                                        num = function(v) {
                                        return parseInt(v, 10) || 0;
                                },
                                        self = this;
                                if (o.helper) {
                                        var pr = o.proportionallyResize,
                                                ista = pr && (/textarea/i).test(pr.get(0).nodeName),
                                                soffseth = ista && $.ui.hasScroll(pr.get(0), 'left') ? 0 : self.sizeDiff.height,
                                        soffsetw = ista ? 0 : self.sizeDiff.width;
                                        var s = {
                                                width: (self.size.width - soffsetw),
                                                height: (self.size.height - soffseth)
                                        },
                                                left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
                                                top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
                                        if (!o.animate) this.element.css($.extend(s, {
                                                top: top,
                                                left: left
                                        }));
                                        if (o.helper && !o.animate) this._proportionallyResize();
                                }
                                if (o.preserveCursor) $('body').css('cursor', 'auto');
                                this.propagate("stop", e);
                                if (o.helper) this.helper.remove();
                                return false;
                        },
                        _updateCache: function(data) {
                                var o = this.options;
                                this.offset = this.helper.offset();
                                if (data.left) this.position.left = data.left;
                                if (data.top) this.position.top = data.top;
                                if (data.height) this.size.height = data.height;
                                if (data.width) this.size.width = data.width;
                        },
                        _updateRatio: function(data, e) {
                                var o = this.options,
                                        cpos = this.position,
                                        csize = this.size,
                                        a = this.axis;
                                if (data.height) data.width = (csize.height / o.aspectRatio);
                                else if (data.width) data.height = (csize.width * o.aspectRatio);
                                if (a == 'sw') {
                                        data.left = cpos.left + (csize.width - data.width);
                                        data.top = null;
                                }
                                if (a == 'nw') {
                                        data.top = cpos.top + (csize.height - data.height);
                                        data.left = cpos.left + (csize.width - data.width);
                                }
                                return data;
                        },
                        _respectSize: function(data, e) {
                                var el = this.helper,
                                        o = this.options,
                                        pRatio = o._aspectRatio || e.shiftKey,
                                        a = this.axis,
                                        ismaxw = data.width && o.maxWidth && o.maxWidth < data.width,
                                        ismaxh = data.height && o.maxHeight && o.maxHeight < data.height,
                                        isminw = data.width && o.minWidth && o.minWidth > data.width,
                                        isminh = data.height && o.minHeight && o.minHeight > data.height;
                                if (isminw) data.width = o.minWidth;
                                if (isminh) data.height = o.minHeight;
                                if (ismaxw) data.width = o.maxWidth;
                                if (ismaxh) data.height = o.maxHeight;
                                var dw = this.originalPosition.left + this.originalSize.width,
                                        dh = this.position.top + this.size.height;
                                var cw = /sw|nw|w/.test(a),
                                        ch = /nw|ne|n/.test(a);
                                if (isminw && cw) data.left = dw - o.minWidth;
                                if (ismaxw && cw) data.left = dw - o.maxWidth;
                                if (isminh && ch) data.top = dh - o.minHeight;
                                if (ismaxh && ch) data.top = dh - o.maxHeight;
                                var isNotwh = !data.width && !data.height;
                                if (isNotwh && !data.left && data.top) data.top = null;
                                else if (isNotwh && !data.top && data.left) data.left = null;
                                return data;
                        },
                        _proportionallyResize: function() {
                                var o = this.options;
                                if (!o.proportionallyResize) return;
                                var prel = o.proportionallyResize,
                                        el = this.helper || this.element;
                                if (!o.borderDif) {
                                        var b = [prel.css('borderTopWidth'), prel.css('borderRightWidth'), prel.css('borderBottomWidth'), prel.css('borderLeftWidth')],
                                                p = [prel.css('paddingTop'), prel.css('paddingRight'), prel.css('paddingBottom'), prel.css('paddingLeft')];
                                        o.borderDif = $.map(b, function(v, i) {
                                                var border = parseInt(v, 10) || 0,
                                                        padding = parseInt(p[i], 10) || 0;
                                                return border + padding;
                                        });
                                }
                                prel.css({
                                        height: (el.height() - o.borderDif[0] - o.borderDif[2]) + "px",
                                        width: (el.width() - o.borderDif[1] - o.borderDif[3]) + "px"
                                });
                        },
                        _renderProxy: function() {
                                var el = this.element,
                                        o = this.options;
                                this.elementOffset = el.offset();
                                if (o.helper) {
                                        this.helper = this.helper || $('<div style="overflow:hidden;"></div>');
                                        var ie6 = $.browser.msie && $.browser.version < 7,
                                                ie6offset = (ie6 ? 1 : 0),
                                                pxyoffset = (ie6 ? 2 : -1);
                                        this.helper.addClass(o.helper).css({
                                                width: el.outerWidth() + pxyoffset,
                                                height: el.outerHeight() + pxyoffset,
                                                position: 'absolute',
                                                left: this.elementOffset.left - ie6offset + 'px',
                                                top: this.elementOffset.top - ie6offset + 'px',
                                                zIndex: ++o.zIndex
                                        });
                                        this.helper.appendTo("body");
                                        if (o.disableSelection) $.ui.disableSelection(this.helper.get(0));
                                } else {
                                        this.helper = el;
                                }
                        },
                        _change: {
                                e: function(e, dx, dy) {
                                        return {
                                                width: this.originalSize.width + dx
                                        };
                                },
                                w: function(e, dx, dy) {
                                        var o = this.options,
                                                cs = this.originalSize,
                                                sp = this.originalPosition;
                                        return {
                                                left: sp.left + dx,
                                                width: cs.width - dx
                                        };
                                },
                                n: function(e, dx, dy) {
                                        var o = this.options,
                                                cs = this.originalSize,
                                                sp = this.originalPosition;
                                        return {
                                                top: sp.top + dy,
                                                height: cs.height - dy
                                        };
                                },
                                s: function(e, dx, dy) {
                                        return {
                                                height: this.originalSize.height + dy
                                        };
                                },
                                se: function(e, dx, dy) {
                                        return $.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [e, dx, dy]));
                                },
                                sw: function(e, dx, dy) {
                                        return $.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [e, dx, dy]));
                                },
                                ne: function(e, dx, dy) {
                                        return $.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [e, dx, dy]));
                                },
                                nw: function(e, dx, dy) {
                                        return $.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [e, dx, dy]));
                                }
                        }
                }));
                $.extend($.ui.resizable, {
                        defaults: {
                                cancel: ":input",
                                distance: 1,
                                delay: 0,
                                preventDefault: true,
                                transparent: false,
                                minWidth: 10,
                                minHeight: 10,
                                aspectRatio: false,
                                disableSelection: true,
                                preserveCursor: true,
                                autoHide: false,
                                knobHandles: false
                        }
                });
                $.ui.plugin.add("resizable", "containment", {
                        start: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable"),
                                        el = self.element;
                                var oc = o.containment,
                                        ce = (oc instanceof $) ? oc.get(0) : (/parent/.test(oc)) ? el.parent().get(0) : oc;
                                if (!ce) return;
                                self.containerElement = $(ce);
                                if (/document/.test(oc) || oc == document) {
                                        self.containerOffset = {
                                                left: 0,
                                                top: 0
                                        };
                                        self.containerPosition = {
                                                left: 0,
                                                top: 0
                                        };
                                        self.parentData = {
                                                element: $(document),
                                                left: 0,
                                                top: 0,
                                                width: $(document).width(),
                                                height: $(document).height() || document.body.parentNode.scrollHeight
                                        };
                                } else {
                                        self.containerOffset = $(ce).offset();
                                        self.containerPosition = $(ce).position();
                                        self.containerSize = {
                                                height: $(ce).innerHeight(),
                                                width: $(ce).innerWidth()
                                        };
                                        var co = self.containerOffset,
                                                ch = self.containerSize.height,
                                                cw = self.containerSize.width,
                                                width = ($.ui.hasScroll(ce, "left") ? ce.scrollWidth : cw),
                                                height = ($.ui.hasScroll(ce) ? ce.scrollHeight : ch);
                                        self.parentData = {
                                                element: ce,
                                                left: co.left,
                                                top: co.top,
                                                width: width,
                                                height: height
                                        };
                                }
                        },
                        resize: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable"),
                                        ps = self.containerSize,
                                        co = self.containerOffset,
                                        cs = self.size,
                                        cp = self.position,
                                        pRatio = o._aspectRatio || e.shiftKey,
                                        cop = {
                                        top: 0,
                                        left: 0
                                },
                                        ce = self.containerElement;
                                if (ce[0] != document && /static/.test(ce.css('position'))) cop = self.containerPosition;
                                if (cp.left < (o.helper ? co.left : cop.left)) {
                                        self.size.width = self.size.width + (o.helper ? (self.position.left - co.left) : (self.position.left - cop.left));
                                        if (pRatio) self.size.height = self.size.width * o.aspectRatio;
                                        self.position.left = o.helper ? co.left : cop.left;
                                }
                                if (cp.top < (o.helper ? co.top : 0)) {
                                        self.size.height = self.size.height + (o.helper ? (self.position.top - co.top) : self.position.top);
                                        if (pRatio) self.size.width = self.size.height / o.aspectRatio;
                                        self.position.top = o.helper ? co.top : 0;
                                }
                                var woset = (o.helper ? self.offset.left - co.left : (self.position.left - cop.left)) + self.sizeDiff.width,
                                        hoset = (o.helper ? self.offset.top - co.top : self.position.top) + self.sizeDiff.height;
                                if (woset + self.size.width >= self.parentData.width) {
                                        self.size.width = self.parentData.width - woset;
                                        if (pRatio) self.size.height = self.size.width * o.aspectRatio;
                                }
                                if (hoset + self.size.height >= self.parentData.height) {
                                        self.size.height = self.parentData.height - hoset;
                                        if (pRatio) self.size.width = self.size.height / o.aspectRatio;
                                }
                        },
                        stop: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable"),
                                        cp = self.position,
                                        co = self.containerOffset,
                                        cop = self.containerPosition,
                                        ce = self.containerElement;
                                var helper = $(self.helper),
                                        ho = helper.offset(),
                                        w = helper.innerWidth(),
                                        h = helper.innerHeight();
                                if (o.helper && !o.animate && /relative/.test(ce.css('position'))) $(this).css({
                                        left: (ho.left - co.left),
                                        top: (ho.top - co.top),
                                        width: w,
                                        height: h
                                });
                                if (o.helper && !o.animate && /static/.test(ce.css('position'))) $(this).css({
                                        left: cop.left + (ho.left - co.left),
                                        top: cop.top + (ho.top - co.top),
                                        width: w,
                                        height: h
                                });
                        }
                });
                $.ui.plugin.add("resizable", "grid", {
                        resize: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable"),
                                        cs = self.size,
                                        os = self.originalSize,
                                        op = self.originalPosition,
                                        a = self.axis,
                                        ratio = o._aspectRatio || e.shiftKey;
                                o.grid = typeof o.grid == "number" ? [o.grid, o.grid] : o.grid;
                                var ox = Math.round((cs.width - os.width) / (o.grid[0] || 1)) * (o.grid[0] || 1),
                                        oy = Math.round((cs.height - os.height) / (o.grid[1] || 1)) * (o.grid[1] || 1);
                                if (/^(se|s|e)$/.test(a)) {
                                        self.size.width = os.width + ox;
                                        self.size.height = os.height + oy;
                                } else if (/^(ne)$/.test(a)) {
                                        self.size.width = os.width + ox;
                                        self.size.height = os.height + oy;
                                        self.position.top = op.top - oy;
                                } else if (/^(sw)$/.test(a)) {
                                        self.size.width = os.width + ox;
                                        self.size.height = os.height + oy;
                                        self.position.left = op.left - ox;
                                } else {
                                        self.size.width = os.width + ox;
                                        self.size.height = os.height + oy;
                                        self.position.top = op.top - oy;
                                        self.position.left = op.left - ox;
                                }
                        }
                });
                $.ui.plugin.add("resizable", "animate", {
                        stop: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable");
                                var pr = o.proportionallyResize,
                                        ista = pr && (/textarea/i).test(pr.get(0).nodeName),
                                        soffseth = ista && $.ui.hasScroll(pr.get(0), 'left') ? 0 : self.sizeDiff.height,
                                soffsetw = ista ? 0 : self.sizeDiff.width;
                                var style = {
                                        width: (self.size.width - soffsetw),
                                        height: (self.size.height - soffseth)
                                },
                                        left = (parseInt(self.element.css('left'), 10) + (self.position.left - self.originalPosition.left)) || null,
                                        top = (parseInt(self.element.css('top'), 10) + (self.position.top - self.originalPosition.top)) || null;
                                self.element.animate($.extend(style, top && left ? {
                                        top: top,
                                        left: left
                                } : {}), {
                                        duration: o.animateDuration || "slow",
                                        easing: o.animateEasing || "swing",
                                        step: function() {
                                                var data = {
                                                        width: parseInt(self.element.css('width'), 10),
                                                        height: parseInt(self.element.css('height'), 10),
                                                        top: parseInt(self.element.css('top'), 10),
                                                        left: parseInt(self.element.css('left'), 10)
                                                };
                                                if (pr) pr.css({
                                                        width: data.width,
                                                        height: data.height
                                                });
                                                self._updateCache(data);
                                                self.propagate("animate", e);
                                        }
                                });
                        }
                });
                $.ui.plugin.add("resizable", "ghost", {
                        start: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable"),
                                        pr = o.proportionallyResize,
                                        cs = self.size;
                                if (!pr) self.ghost = self.element.clone();
                                else self.ghost = pr.clone();
                                self.ghost.css({
                                        opacity: .25,
                                        display: 'block',
                                        position: 'relative',
                                        height: cs.height,
                                        width: cs.width,
                                        margin: 0,
                                        left: 0,
                                        top: 0
                                }).addClass('ui-resizable-ghost').addClass(typeof o.ghost == 'string' ? o.ghost : '');
                                self.ghost.appendTo(self.helper);
                        },
                        resize: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable"),
                                        pr = o.proportionallyResize;
                                if (self.ghost) self.ghost.css({
                                        position: 'relative',
                                        height: self.size.height,
                                        width: self.size.width
                                });
                        },
                        stop: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable"),
                                        pr = o.proportionallyResize;
                                if (self.ghost && self.helper) self.helper.get(0).removeChild(self.ghost.get(0));
                        }
                });
                $.ui.plugin.add("resizable", "alsoResize", {
                        start: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable"),
                                        _store = function(exp) {
                                        $(exp).each(function() {
                                                $(this).data("resizable-alsoresize", {
                                                        width: parseInt($(this).width(), 10),
                                                        height: parseInt($(this).height(), 10),
                                                        left: parseInt($(this).css('left'), 10),
                                                        top: parseInt($(this).css('top'), 10)
                                                });
                                        });
                                };
                                if (typeof(o.alsoResize) == 'object') {
                                        if (o.alsoResize.length) {
                                                o.alsoResize = o.alsoResize[0];
                                                _store(o.alsoResize);
                                        } else {
                                                $.each(o.alsoResize, function(exp, c) {
                                                        _store(exp);
                                                });
                                        }
                                } else {
                                        _store(o.alsoResize);
                                }
                        },
                        resize: function(e, ui) {
                                var o = ui.options,
                                        self = $(this).data("resizable"),
                                        os = self.originalSize,
                                        op = self.originalPosition;
                                var delta = {
                                        height: (self.size.height - os.height) || 0,
                                        width: (self.size.width - os.width) || 0,
                                        top: (self.position.top - op.top) || 0,
                                        left: (self.position.left - op.left) || 0
                                },
                                        _alsoResize = function(exp, c) {
                                        $(exp).each(function() {
                                                var start = $(this).data("resizable-alsoresize"),
                                                        style = {},
                                                        css = c && c.length ? c : ['width', 'height', 'top', 'left'];
                                                $.each(css || ['width', 'height', 'top', 'left'], function(i, prop) {
                                                        var sum = (start[prop] || 0) + (delta[prop] || 0);
                                                        if (sum && sum >= 0) style[prop] = sum || null;
                                                });
                                                $(this).css(style);
                                        });
                                };
                                if (typeof(o.alsoResize) == 'object') {
                                        $.each(o.alsoResize, function(exp, c) {
                                                _alsoResize(exp, c);
                                        });
                                } else {
                                        _alsoResize(o.alsoResize);
                                }
                        },
                        stop: function(e, ui) {
                                $(this).removeData("resizable-alsoresize-start");
                        }
                });
        })(jQuery);
        (function($) {
                $.widget("ui.selectable", $.extend({},
                $.ui.mouse, {
                        init: function() {
                                var self = this;
                                this.element.addClass("ui-selectable");
                                this.dragged = false;
                                var selectees;
                                this.refresh = function() {
                                        selectees = $(self.options.filter, self.element[0]);
                                        selectees.each(function() {
                                                var $this = $(this);
                                                var pos = $this.offset();
                                                $.data(this, "selectable-item", {
                                                        element: this,
                                                        $element: $this,
                                                        left: pos.left,
                                                        top: pos.top,
                                                        right: pos.left + $this.width(),
                                                        bottom: pos.top + $this.height(),
                                                        startselected: false,
                                                        selected: $this.hasClass('ui-selected'),
                                                        selecting: $this.hasClass('ui-selecting'),
                                                        unselecting: $this.hasClass('ui-unselecting')
                                                });
                                        });
                                };
                                this.refresh();
                                this.selectees = selectees.addClass("ui-selectee");
                                this.mouseInit();
                                this.helper = $(document.createElement('div')).css({
                                        border: '1px dotted black'
                                });
                        },
                        toggle: function() {
                                if (this.options.disabled) {
                                        this.enable();
                                } else {
                                        this.disable();
                                }
                        },
                        destroy: function() {
                                this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");
                                this.mouseDestroy();
                        },
                        mouseStart: function(e) {
                                var self = this;
                                this.opos = [e.pageX, e.pageY];
                                if (this.options.disabled) return;
                                var options = this.options;
                                this.selectees = $(options.filter, this.element[0]);
                                this.element.triggerHandler("selectablestart", [e, {
                                        "selectable": this.element[0],
                                        "options": options
                                }], options.start);
                                $('body').append(this.helper);
                                this.helper.css({
                                        "z-index": 100,
                                        "position": "absolute",
                                        "left": e.clientX,
                                        "top": e.clientY,
                                        "width": 0,
                                        "height": 0
                                });
                                if (options.autoRefresh) {
                                        this.refresh();
                                }
                                this.selectees.filter('.ui-selected').each(function() {
                                        var selectee = $.data(this, "selectable-item");
                                        selectee.startselected = true;
                                        if (!e.ctrlKey) {
                                                selectee.$element.removeClass('ui-selected');
                                                selectee.selected = false;
                                                selectee.$element.addClass('ui-unselecting');
                                                selectee.unselecting = true;
                                                self.element.triggerHandler("selectableunselecting", [e, {
                                                        selectable: self.element[0],
                                                        unselecting: selectee.element,
                                                        options: options
                                                }], options.unselecting);
                                        }
                                });
                                var isSelectee = false;
                                $(e.target).parents().andSelf().each(function() {
                                        if ($.data(this, "selectable-item")) isSelectee = true;
                                });
                                return this.options.keyboard ? !isSelectee : true;
                        },
                        mouseDrag: function(e) {
                                var self = this;
                                this.dragged = true;
                                if (this.options.disabled) return;
                                var options = this.options;
                                var x1 = this.opos[0],
                                        y1 = this.opos[1],
                                        x2 = e.pageX,
                                        y2 = e.pageY;
                                if (x1 > x2) {
                                        var tmp = x2;
                                        x2 = x1;
                                        x1 = tmp;
                                }
                                if (y1 > y2) {
                                        var tmp = y2;
                                        y2 = y1;
                                        y1 = tmp;
                                }
                                this.helper.css({
                                        left: x1,
                                        top: y1,
                                        width: x2 - x1,
                                        height: y2 - y1
                                });
                                this.selectees.each(function() {
                                        var selectee = $.data(this, "selectable-item");
                                        if (!selectee || selectee.element == self.element[0]) return;
                                        var hit = false;
                                        if (options.tolerance == 'touch') {
                                                hit = (!(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1));
                                        } else if (options.tolerance == 'fit') {
                                                hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
                                        }
                                        if (hit) {
                                                if (selectee.selected) {
                                                        selectee.$element.removeClass('ui-selected');
                                                        selectee.selected = false;
                                                }
                                                if (selectee.unselecting) {
                                                        selectee.$element.removeClass('ui-unselecting');
                                                        selectee.unselecting = false;
                                                }
                                                if (!selectee.selecting) {
                                                        selectee.$element.addClass('ui-selecting');
                                                        selectee.selecting = true;
                                                        self.element.triggerHandler("selectableselecting", [e, {
                                                                selectable: self.element[0],
                                                                selecting: selectee.element,
                                                                options: options
                                                        }], options.selecting);
                                                }
                                        } else {
                                                if (selectee.selecting) {
                                                        if (e.ctrlKey && selectee.startselected) {
                                                                selectee.$element.removeClass('ui-selecting');
                                                                selectee.selecting = false;
                                                                selectee.$element.addClass('ui-selected');
                                                                selectee.selected = true;
                                                        } else {
                                                                selectee.$element.removeClass('ui-selecting');
                                                                selectee.selecting = false;
                                                                if (selectee.startselected) {
                                                                        selectee.$element.addClass('ui-unselecting');
                                                                        selectee.unselecting = true;
                                                                }
                                                                self.element.triggerHandler("selectableunselecting", [e, {
                                                                        selectable: self.element[0],
                                                                        unselecting: selectee.element,
                                                                        options: options
                                                                }], options.unselecting);
                                                        }
                                                }
                                                if (selectee.selected) {
                                                        if (!e.ctrlKey && !selectee.startselected) {
                                                                selectee.$element.removeClass('ui-selected');
                                                                selectee.selected = false;
                                                                selectee.$element.addClass('ui-unselecting');
                                                                selectee.unselecting = true;
                                                                self.element.triggerHandler("selectableunselecting", [e, {
                                                                        selectable: self.element[0],
                                                                        unselecting: selectee.element,
                                                                        options: options
                                                                }], options.unselecting);
                                                        }
                                                }
                                        }
                                });
                                return false;
                        },
                        mouseStop: function(e) {
                                var self = this;
                                this.dragged = false;
                                var options = this.options;
                                $('.ui-unselecting', this.element[0]).each(function() {
                                        var selectee = $.data(this, "selectable-item");
                                        selectee.$element.removeClass('ui-unselecting');
                                        selectee.unselecting = false;
                                        selectee.startselected = false;
                                        self.element.triggerHandler("selectableunselected", [e, {
                                                selectable: self.element[0],
                                                unselected: selectee.element,
                                                options: options
                                        }], options.unselected);
                                });
                                $('.ui-selecting', this.element[0]).each(function() {
                                        var selectee = $.data(this, "selectable-item");
                                        selectee.$element.removeClass('ui-selecting').addClass('ui-selected');
                                        selectee.selecting = false;
                                        selectee.selected = true;
                                        selectee.startselected = true;
                                        self.element.triggerHandler("selectableselected", [e, {
                                                selectable: self.element[0],
                                                selected: selectee.element,
                                                options: options
                                        }], options.selected);
                                });
                                this.element.triggerHandler("selectablestop", [e, {
                                        selectable: self.element[0],
                                        options: this.options
                                }], this.options.stop);
                                this.helper.remove();
                                return false;
                        }
                }));
                $.extend($.ui.selectable, {
                        defaults: {
                                distance: 1,
                                delay: 0,
                                cancel: ":input",
                                appendTo: 'body',
                                autoRefresh: true,
                                filter: '*',
                                tolerance: 'touch'
                        }
                });
        })(jQuery);
        (function($) {
                function contains(a, b) {
                        var safari2 = $.browser.safari && $.browser.version < 522;
                        if (a.contains && !safari2) {
                                return a.contains(b);
                        }
                        if (a.compareDocumentPosition) return !! (a.compareDocumentPosition(b) & 16);
                        while (b = b.parentNode)
                        if (b == a) return true;
                        return false;
                };
                $.widget("ui.sortable", $.extend({},
                $.ui.mouse, {
                        init: function() {
                                var o = this.options;
                                this.containerCache = {};
                                this.element.addClass("ui-sortable");
                                this.refresh();
                                this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false;
                                if (! (/(relative|absolute|fixed)/).test(this.element.css('position'))) this.element.css('position', 'relative');
                                this.offset = this.element.offset();
                                this.mouseInit();
                        },
                        plugins: {},
                        ui: function(inst) {
                                return {
                                        helper: (inst || this)["helper"],
                                        placeholder: (inst || this)["placeholder"] || $([]),
                                        position: (inst || this)["position"],
                                        absolutePosition: (inst || this)["positionAbs"],
                                        options: this.options,
                                        element: this.element,
                                        item: (inst || this)["currentItem"],
                                        sender: inst ? inst.element : null
                                };
                        },
                        propagate: function(n, e, inst, noPropagation) {
                                $.ui.plugin.call(this, n, [e, this.ui(inst)]);
                                if (!noPropagation) this.element.triggerHandler(n == "sort" ? n : "sort" + n, [e, this.ui(inst)], this.options[n]);
                        },
                        serialize: function(o) {
                                var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper');
                                var str = [];
                                o = o || {};
                                items.each(function() {
                                        var res = ($(this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
                                        if (res) str.push((o.key || res[1]) + '[]=' + (o.key && o.expression ? res[1] : res[2]));
                                });
                                return str.join('&');
                        },
                        toArray: function(attr) {
                                var items = ($.isFunction(this.options.items) ? this.options.items.call(this.element) : $(this.options.items, this.element)).not('.ui-sortable-helper');
                                var ret = [];
                                items.each(function() {
                                        ret.push($(this).attr(attr || 'id'));
                                });
                                return ret;
                        },
                        intersectsWith: function(item) {
                                var x1 = this.positionAbs.left,
                                        x2 = x1 + this.helperProportions.width,
                                        y1 = this.positionAbs.top,
                                        y2 = y1 + this.helperProportions.height;
                                var l = item.left,
                                        r = l + item.width,
                                        t = item.top,
                                        b = t + item.height;
                                if (this.options.tolerance == "pointer" || this.options.forcePointerForContainers || (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) {
                                        return (y1 + this.offset.click.top > t && y1 + this.offset.click.top < b && x1 + this.offset.click.left > l && x1 + this.offset.click.left < r);
                                } else {
                                        return (l < x1 + (this.helperProportions.width / 2) && x2 - (this.helperProportions.width / 2) < r && t < y1 + (this.helperProportions.height / 2) && y2 - (this.helperProportions.height / 2) < b);
                                }
                        },
                        intersectsWithEdge: function(item) {
                                var x1 = this.positionAbs.left,
                                        x2 = x1 + this.helperProportions.width,
                                        y1 = this.positionAbs.top,
                                        y2 = y1 + this.helperProportions.height;
                                var l = item.left,
                                        r = l + item.width,
                                        t = item.top,
                                        b = t + item.height;
                                if (this.options.tolerance == "pointer" || (this.options.tolerance == "guess" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])) {
                                        if (! (y1 + this.offset.click.top > t && y1 + this.offset.click.top < b && x1 + this.offset.click.left > l && x1 + this.offset.click.left < r)) return false;
                                        if (this.floating) {
                                                if (x1 + this.offset.click.left > l && x1 + this.offset.click.left < l + item.width / 2) return 2;
                                                if (x1 + this.offset.click.left > l + item.width / 2 && x1 + this.offset.click.left < r) return 1;
                                        } else {
                                                if (y1 + this.offset.click.top > t && y1 + this.offset.click.top < t + item.height / 2) return 2;
                                                if (y1 + this.offset.click.top > t + item.height / 2 && y1 + this.offset.click.top < b) return 1;
                                        }
                                } else {
                                        if (! (l < x1 + (this.helperProportions.width / 2) && x2 - (this.helperProportions.width / 2) < r && t < y1 + (this.helperProportions.height / 2) && y2 - (this.helperProportions.height / 2) < b)) return false;
                                        if (this.floating) {
                                                if (x2 > l && x1 < l) return 2;
                                                if (x1 < r && x2 > r) return 1;
                                        } else {
                                                if (y2 > t && y1 < t) return 1;
                                                if (y1 < b && y2 > b) return 2;
                                        }
                                }
                                return false;
                        },
                        refresh: function() {
                                this.refreshItems();
                                this.refreshPositions();
                        },
                        refreshItems: function() {
                                this.items = [];
                                this.containers = [this];
                                var items = this.items;
                                var self = this;
                                var queries = [
                                        [$.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
                                                options: this.options,
                                                item: this.currentItem
                                        }) : $(this.options.items, this.element), this]];
                                if (this.options.connectWith) {
                                        for (var i = this.options.connectWith.length - 1; i >= 0; i--) {
                                                var cur = $(this.options.connectWith[i]);
                                                for (var j = cur.length - 1; j >= 0; j--) {
                                                        var inst = $.data(cur[j], 'sortable');
                                                        if (inst && !inst.options.disabled) {
                                                                queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element), inst]);
                                                                this.containers.push(inst);
                                                        }
                                                };
                                        };
                                }
                                for (var i = queries.length - 1; i >= 0; i--) {
                                        queries[i][0].each(function() {
                                                $.data(this, 'sortable-item', queries[i][1]);
                                                items.push({
                                                        item: $(this),
                                                        instance: queries[i][1],
                                                        width: 0,
                                                        height: 0,
                                                        left: 0,
                                                        top: 0
                                                });
                                        });
                                };
                        },
                        refreshPositions: function(fast) {
                                if (this.offsetParent) {
                                        var po = this.offsetParent.offset();
                                        this.offset.parent = {
                                                top: po.top + this.offsetParentBorders.top,
                                                left: po.left + this.offsetParentBorders.left
                                        };
                                }
                                for (var i = this.items.length - 1; i >= 0; i--) {
                                        if (this.items[i].instance != this.currentContainer && this.currentContainer && this.items[i].item[0] != this.currentItem[0]) continue;
                                        var t = this.options.toleranceElement ? $(this.options.toleranceElement, this.items[i].item) : this.items[i].item;
                                        if (!fast) {
                                                this.items[i].width = t[0].offsetWidth;
                                                this.items[i].height = t[0].offsetHeight;
                                        }
                                        var p = t.offset();
                                        this.items[i].left = p.left;
                                        this.items[i].top = p.top;
                                };
                                if (this.options.custom && this.options.custom.refreshContainers) {
                                        this.options.custom.refreshContainers.call(this);
                                } else {
                                        for (var i = this.containers.length - 1; i >= 0; i--) {
                                                var p = this.containers[i].element.offset();
                                                this.containers[i].containerCache.left = p.left;
                                                this.containers[i].containerCache.top = p.top;
                                                this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
                                                this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
                                        };
                                }
                        },
                        destroy: function() {
                                this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");
                                this.mouseDestroy();
                                for (var i = this.items.length - 1; i >= 0; i--)
                                this.items[i].item.removeData("sortable-item");
                        },
                        createPlaceholder: function(that) {
                                var self = that || this,
                                        o = self.options;
                                if (o.placeholder.constructor == String) {
                                        var className = o.placeholder;
                                        o.placeholder = {
                                                element: function() {
                                                        return $('<div></div>').addClass(className)[0];
                                                },
                                                update: function(i, p) {
                                                        p.css(i.offset()).css({
                                                                width: i.outerWidth(),
                                                                height: i.outerHeight()
                                                        });
                                                }
                                        };
                                }
                                self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem)).appendTo('body').css({
                                        position: 'absolute'
                                });
                                o.placeholder.update.call(self.element, self.currentItem, self.placeholder);
                        },
                        contactContainers: function(e) {
                                for (var i = this.containers.length - 1; i >= 0; i--) {
                                        if (this.intersectsWith(this.containers[i].containerCache)) {
                                                if (!this.containers[i].containerCache.over) {
                                                        if (this.currentContainer != this.containers[i]) {
                                                                var dist = 10000;
                                                                var itemWithLeastDistance = null;
                                                                var base = this.positionAbs[this.containers[i].floating ? 'left' : 'top'];
                                                                for (var j = this.items.length - 1; j >= 0; j--) {
                                                                        if (!contains(this.containers[i].element[0], this.items[j].item[0])) continue;
                                                                        var cur = this.items[j][this.containers[i].floating ? 'left' : 'top'];
                                                                        if (Math.abs(cur - base) < dist) {
                                                                                dist = Math.abs(cur - base);
                                                                                itemWithLeastDistance = this.items[j];
                                                                        }
                                                                }
                                                                if (!itemWithLeastDistance && !this.options.dropOnEmpty) continue;
                                                                if (this.placeholder) this.placeholder.remove();
                                                                if (this.containers[i].options.placeholder) {
                                                                        this.containers[i].createPlaceholder(this);
                                                                } else {
                                                                        this.placeholder = null;;
                                                                }
                                                                this.currentContainer = this.containers[i];
                                                                itemWithLeastDistance ? this.rearrange(e, itemWithLeastDistance, null, true) : this.rearrange(e, null, this.containers[i].element, true);
                                                                this.propagate("change", e);
                                                                this.containers[i].propagate("change", e, this);
                                                        }
                                                        this.containers[i].propagate("over", e, this);
                                                        this.containers[i].containerCache.over = 1;
                                                }
                                        } else {
                                                if (this.containers[i].containerCache.over) {
                                                        this.containers[i].propagate("out", e, this);
                                                        this.containers[i].containerCache.over = 0;
                                                }
                                        }
                                };
                        },
                        mouseCapture: function(e, overrideHandle) {
                                if (this.options.disabled || this.options.type == 'static') return false;
                                this.refreshItems();
                                var currentItem = null,
                                        self = this,
                                        nodes = $(e.target).parents().each(function() {
                                        if ($.data(this, 'sortable-item') == self) {
                                                currentItem = $(this);
                                                return false;
                                        }
                                });
                                if ($.data(e.target, 'sortable-item') == self) currentItem = $(e.target);
                                if (!currentItem) return false;
                                if (this.options.handle && !overrideHandle) {
                                        var validHandle = false;
                                        $(this.options.handle, currentItem).find("*").andSelf().each(function() {
                                                if (this == e.target) validHandle = true;
                                        });
                                        if (!validHandle) return false;
                                }
                                this.currentItem = currentItem;
                                return true;
                        },
                        mouseStart: function(e, overrideHandle, noActivation) {
                                var o = this.options;
                                this.currentContainer = this;
                                this.refreshPositions();
                                this.helper = typeof o.helper == 'function' ? $(o.helper.apply(this.element[0], [e, this.currentItem])) : this.currentItem.clone();
                                if (!this.helper.parents('body').length) $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(this.helper[0]);
                                this.helper.css({
                                        position: 'absolute',
                                        clear: 'both'
                                }).addClass('ui-sortable-helper');
                                this.margins = {
                                        left: (parseInt(this.currentItem.css("marginLeft"), 10) || 0),
                                        top: (parseInt(this.currentItem.css("marginTop"), 10) || 0)
                                };
                                this.offset = this.currentItem.offset();
                                this.offset = {
                                        top: this.offset.top - this.margins.top,
                                        left: this.offset.left - this.margins.left
                                };
                                this.offset.click = {
                                        left: e.pageX - this.offset.left,
                                        top: e.pageY - this.offset.top
                                };
                                this.offsetParent = this.helper.offsetParent();
                                var po = this.offsetParent.offset();
                                this.offsetParentBorders = {
                                        top: (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                                        left: (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
                                };
                                this.offset.parent = {
                                        top: po.top + this.offsetParentBorders.top,
                                        left: po.left + this.offsetParentBorders.left
                                };
                                this.originalPosition = this.generatePosition(e);
                                this.domPosition = {
                                        prev: this.currentItem.prev()[0],
                                        parent: this.currentItem.parent()[0]
                                };
                                this.helperProportions = {
                                        width: this.helper.outerWidth(),
                                        height: this.helper.outerHeight()
                                };
                                if (o.placeholder) this.createPlaceholder();
                                this.propagate("start", e);
                                this.helperProportions = {
                                        width: this.helper.outerWidth(),
                                        height: this.helper.outerHeight()
                                };
                                if (o.cursorAt) {
                                        if (o.cursorAt.left != undefined) this.offset.click.left = o.cursorAt.left;
                                        if (o.cursorAt.right != undefined) this.offset.click.left = this.helperProportions.width - o.cursorAt.right;
                                        if (o.cursorAt.top != undefined) this.offset.click.top = o.cursorAt.top;
                                        if (o.cursorAt.bottom != undefined) this.offset.click.top = this.helperProportions.height - o.cursorAt.bottom;
                                }
                                if (o.containment) {
                                        if (o.containment == 'parent') o.containment = this.helper[0].parentNode;
                                        if (o.containment == 'document' || o.containment == 'window') this.containment = [0 - this.offset.parent.left, 0 - this.offset.parent.top, $(o.containment == 'document' ? document : window).width() - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.element.css("marginRight"), 10) || 0), ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.element.css("marginBottom"), 10) || 0)];
                                        if (! (/^(document|window|parent)$/).test(o.containment)) {
                                                var ce = $(o.containment)[0];
                                                var co = $(o.containment).offset();
                                                this.containment = [co.left + (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - this.offset.parent.left, co.top + (parseInt($(ce).css("borderTopWidth"), 10) || 0) - this.offset.parent.top, co.left + Math.max(ce.scrollWidth, ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - this.offset.parent.left - this.helperProportions.width - this.margins.left - (parseInt(this.currentItem.css("marginRight"), 10) || 0), co.top + Math.max(ce.scrollHeight, ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - this.offset.parent.top - this.helperProportions.height - this.margins.top - (parseInt(this.currentItem.css("marginBottom"), 10) || 0)];
                                        }
                                }
                                if (this.options.placeholder != 'clone') this.currentItem.css('visibility', 'hidden');
                                if (!noActivation) {
                                        for (var i = this.containers.length - 1; i >= 0; i--) {
                                                this.containers[i].propagate("activate", e, this);
                                        }
                                }
                                if ($.ui.ddmanager) $.ui.ddmanager.current = this;
                                if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, e);
                                this.dragging = true;
                                this.mouseDrag(e);
                                return true;
                        },
                        convertPositionTo: function(d, pos) {
                                if (!pos) pos = this.position;
                                var mod = d == "absolute" ? 1 : -1;
                                return {
                                        top: (pos.top + this.offset.parent.top * mod - (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop) * mod + this.margins.top * mod),
                                        left: (pos.left + this.offset.parent.left * mod - (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft) * mod + this.margins.left * mod)
                                };
                        },
                        generatePosition: function(e) {
                                var o = this.options;
                                var position = {
                                        top: (e.pageY - this.offset.click.top - this.offset.parent.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)),
                                        left: (e.pageX - this.offset.click.left - this.offset.parent.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft))
                                };
                                if (!this.originalPosition) return position;
                                if (this.containment) {
                                        if (position.left < this.containment[0]) position.left = this.containment[0];
                                        if (position.top < this.containment[1]) position.top = this.containment[1];
                                        if (position.left > this.containment[2]) position.left = this.containment[2];
                                        if (position.top > this.containment[3]) position.top = this.containment[3];
                                }
                                if (o.grid) {
                                        var top = this.originalPosition.top + Math.round((position.top - this.originalPosition.top) / o.grid[1]) * o.grid[1];
                                        position.top = this.containment ? (!(top < this.containment[1] || top > this.containment[3]) ? top : (!(top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
                                        var left = this.originalPosition.left + Math.round((position.left - this.originalPosition.left) / o.grid[0]) * o.grid[0];
                                        position.left = this.containment ? (!(left < this.containment[0] || left > this.containment[2]) ? left : (!(left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
                                }
                                return position;
                        },
                        mouseDrag: function(e) {
                                this.position = this.generatePosition(e);
                                this.positionAbs = this.convertPositionTo("absolute");
                                $.ui.plugin.call(this, "sort", [e, this.ui()]);
                                this.positionAbs = this.convertPositionTo("absolute");
                                this.helper[0].style.left = this.position.left + 'px';
                                this.helper[0].style.top = this.position.top + 'px';
                                for (var i = this.items.length - 1; i >= 0; i--) {
                                        var intersection = this.intersectsWithEdge(this.items[i]);
                                        if (!intersection) continue;
                                        if (this.items[i].item[0] != this.currentItem[0] && this.currentItem[intersection == 1 ? "next" : "prev"]()[0] != this.items[i].item[0] && !contains(this.currentItem[0], this.items[i].item[0]) && (this.options.type == 'semi-dynamic' ? !contains(this.element[0], this.items[i].item[0]) : true)) {
                                                this.direction = intersection == 1 ? "down" : "up";
                                                this.rearrange(e, this.items[i]);
                                                this.propagate("change", e);
                                                break;
                                        }
                                }
                                this.contactContainers(e);
                                if ($.ui.ddmanager) $.ui.ddmanager.drag(this, e);
                                this.element.triggerHandler("sort", [e, this.ui()], this.options["sort"]);
                                return false;
                        },
                        rearrange: function(e, i, a, hardRefresh) {
                                a ? a[0].appendChild(this.currentItem[0]) : i.item[0].parentNode.insertBefore(this.currentItem[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));
                                this.counter = this.counter ? ++this.counter : 1;
                                var self = this,
                                        counter = this.counter;
                                window.setTimeout(function() {
                                        if (counter == self.counter) self.refreshPositions(!hardRefresh);
                                },
                                0);
                                if (this.options.placeholder) this.options.placeholder.update.call(this.element, this.currentItem, this.placeholder);
                        },
                        mouseStop: function(e, noPropagation) {
                                if ($.ui.ddmanager && !this.options.dropBehaviour) $.ui.ddmanager.drop(this, e);
                                if (this.options.revert) {
                                        var self = this;
                                        var cur = self.currentItem.offset();
                                        if (self.placeholder) self.placeholder.animate({
                                                opacity: 'hide'
                                        },
                                        (parseInt(this.options.revert, 10) || 500) - 50);
                                        $(this.helper).animate({
                                                left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
                                                top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
                                        },
                                        parseInt(this.options.revert, 10) || 500, function() {
                                                self.clear(e);
                                        });
                                } else {
                                        this.clear(e, noPropagation);
                                }
                                return false;
                        },
                        clear: function(e, noPropagation) {
                                if (this.domPosition.prev != this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) this.propagate("update", e, null, noPropagation);
                                if (!contains(this.element[0], this.currentItem[0])) {
                                        this.propagate("remove", e, null, noPropagation);
                                        for (var i = this.containers.length - 1; i >= 0; i--) {
                                                if (contains(this.containers[i].element[0], this.currentItem[0])) {
                                                        this.containers[i].propagate("update", e, this, noPropagation);
                                                        this.containers[i].propagate("receive", e, this, noPropagation);
                                                }
                                        };
                                };
                                for (var i = this.containers.length - 1; i >= 0; i--) {
                                        this.containers[i].propagate("deactivate", e, this, noPropagation);
                                        if (this.containers[i].containerCache.over) {
                                                this.containers[i].propagate("out", e, this);
                                                this.containers[i].containerCache.over = 0;
                                        }
                                }
                                this.dragging = false;
                                if (this.cancelHelperRemoval) {
                                        this.propagate("stop", e, null, noPropagation);
                                        return false;
                                }
                                $(this.currentItem).css('visibility', '');
                                if (this.placeholder) this.placeholder.remove();
                                this.helper.remove();
                                this.helper = null;
                                this.propagate("stop", e, null, noPropagation);
                                return true;
                        }
                }));
                $.extend($.ui.sortable, {
                        getter: "serialize toArray",
                        defaults: {
                                helper: "clone",
                                tolerance: "guess",
                                distance: 1,
                                delay: 0,
                                scroll: true,
                                scrollSensitivity: 20,
                                scrollSpeed: 20,
                                cancel: ":input",
                                items: '> *',
                                zIndex: 1000,
                                dropOnEmpty: true,
                                appendTo: "parent"
                        }
                });
                $.ui.plugin.add("sortable", "cursor", {
                        start: function(e, ui) {
                                var t = $('body');
                                if (t.css("cursor")) ui.options._cursor = t.css("cursor");
                                t.css("cursor", ui.options.cursor);
                        },
                        stop: function(e, ui) {
                                if (ui.options._cursor) $('body').css("cursor", ui.options._cursor);
                        }
                });
                $.ui.plugin.add("sortable", "zIndex", {
                        start: function(e, ui) {
                                var t = ui.helper;
                                if (t.css("zIndex")) ui.options._zIndex = t.css("zIndex");
                                t.css('zIndex', ui.options.zIndex);
                        },
                        stop: function(e, ui) {
                                if (ui.options._zIndex) $(ui.helper).css('zIndex', ui.options._zIndex);
                        }
                });
                $.ui.plugin.add("sortable", "opacity", {
                        start: function(e, ui) {
                                var t = ui.helper;
                                if (t.css("opacity")) ui.options._opacity = t.css("opacity");
                                t.css('opacity', ui.options.opacity);
                        },
                        stop: function(e, ui) {
                                if (ui.options._opacity) $(ui.helper).css('opacity', ui.options._opacity);
                        }
                });
                $.ui.plugin.add("sortable", "scroll", {
                        start: function(e, ui) {
                                var o = ui.options;
                                var i = $(this).data("sortable");
                                i.overflowY = function(el) {
                                        do {
                                                if (/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-y'))) return el;
                                                el = el.parent();
                                        } while (el[0].parentNode);
                                        return $(document);
                                } (i.currentItem);
                                i.overflowX = function(el) {
                                        do {
                                                if (/auto|scroll/.test(el.css('overflow')) || (/auto|scroll/).test(el.css('overflow-x'))) return el;
                                                el = el.parent();
                                        } while (el[0].parentNode);
                                        return $(document);
                                } (i.currentItem);
                                if (i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') i.overflowYOffset = i.overflowY.offset();
                                if (i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') i.overflowXOffset = i.overflowX.offset();
                        },
                        sort: function(e, ui) {
                                var o = ui.options;
                                var i = $(this).data("sortable");
                                if (i.overflowY[0] != document && i.overflowY[0].tagName != 'HTML') {
                                        if ((i.overflowYOffset.top + i.overflowY[0].offsetHeight) - e.pageY < o.scrollSensitivity) i.overflowY[0].scrollTop = i.overflowY[0].scrollTop + o.scrollSpeed;
                                        if (e.pageY - i.overflowYOffset.top < o.scrollSensitivity) i.overflowY[0].scrollTop = i.overflowY[0].scrollTop - o.scrollSpeed;
                                } else {
                                        if (e.pageY - $(document).scrollTop() < o.scrollSensitivity) $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
                                        if ($(window).height() - (e.pageY - $(document).scrollTop()) < o.scrollSensitivity) $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
                                }
                                if (i.overflowX[0] != document && i.overflowX[0].tagName != 'HTML') {
                                        if ((i.overflowXOffset.left + i.overflowX[0].offsetWidth) - e.pageX < o.scrollSensitivity) i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft + o.scrollSpeed;
                                        if (e.pageX - i.overflowXOffset.left < o.scrollSensitivity) i.overflowX[0].scrollLeft = i.overflowX[0].scrollLeft - o.scrollSpeed;
                                } else {
                                        if (e.pageX - $(document).scrollLeft() < o.scrollSensitivity) $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
                                        if ($(window).width() - (e.pageX - $(document).scrollLeft()) < o.scrollSensitivity) $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
                                }
                        }
                });
                $.ui.plugin.add("sortable", "axis", {
                        sort: function(e, ui) {
                                var i = $(this).data("sortable");
                                if (ui.options.axis == "y") i.position.left = i.originalPosition.left;
                                if (ui.options.axis == "x") i.position.top = i.originalPosition.top;
                        }
                });
        })(jQuery);
        (function($) {
                $.widget("ui.accordion", {
                        init: function() {
                                var options = this.options;
                                if (options.navigation) {
                                        var current = this.element.find("a").filter(options.navigationFilter);
                                        if (current.length) {
                                                if (current.filter(options.header).length) {
                                                        options.active = current;
                                                } else {
                                                        options.active = current.parent().parent().prev();
                                                        current.addClass("current");
                                                }
                                        }
                                }
                                options.headers = this.element.find(options.header);
                                options.active = findActive(options.headers, options.active);
                                if ($.browser.msie) {
                                        this.element.find('a').css('zoom', '1');
                                }
                                if (!this.element.hasClass("ui-accordion")) {
                                        this.element.addClass("ui-accordion");
                                        $("<span class='ui-accordion-left'/>").insertBefore(options.headers);
                                        $("<span class='ui-accordion-right'/>").appendTo(options.headers);
                                        options.headers.addClass("ui-accordion-header").attr("tabindex", "0");
                                }
                                var maxHeight;
                                if (options.fillSpace) {
                                        maxHeight = this.element.parent().height();
                                        options.headers.each(function() {
                                                maxHeight -= $(this).outerHeight();
                                        });
                                        var maxPadding = 0;
                                        options.headers.next().each(function() {
                                                maxPadding = Math.max(maxPadding, $(this).innerHeight() - $(this).height());
                                        }).height(maxHeight - maxPadding);
                                } else if (options.autoHeight) {
                                        maxHeight = 0;
                                        options.headers.next().each(function() {
                                                maxHeight = Math.max(maxHeight, $(this).outerHeight());
                                        }).height(maxHeight);
                                }
                                options.headers.not(options.active || "").next().hide();
                                options.active.parent().andSelf().addClass(options.selectedClass);
                                if (options.event) {
                                        this.element.bind((options.event) + ".accordion", clickHandler);
                                }
                        },
                        activate: function(index) {
                                clickHandler.call(this.element[0], {
                                        target: findActive(this.options.headers, index)[0]
                                });
                        },
                        destroy: function() {
                                this.options.headers.next().css("display", "");
                                if (this.options.fillSpace || this.options.autoHeight) {
                                        this.options.headers.next().css("height", "");
                                }
                                $.removeData(this.element[0], "accordion");
                                this.element.removeClass("ui-accordion").unbind(".accordion");
                        }
                });

                function scopeCallback(callback, scope) {
                        return function() {
                                return callback.apply(scope, arguments);
                        };
                };

                function completed(cancel) {
                        if (!$.data(this, "accordion")) {
                                return;
                        }
                        var instance = $.data(this, "accordion");
                        var options = instance.options;
                        options.running = cancel ? 0 : --options.running;
                        if (options.running) {
                                return;
                        }
                        if (options.clearStyle) {
                                options.toShow.add(options.toHide).css({
                                        height: "",
                                        overflow: ""
                                });
                        }
                        $(this).triggerHandler("accordionchange", [$.event.fix({
                                type: 'accordionchange',
                                target: instance.element[0]
                        }), options.data], options.change);
                }


                function toggle(toShow, toHide, data, clickedActive, down) {
                        var options = $.data(this, "accordion").options;
                        options.toShow = toShow;
                        options.toHide = toHide;
                        options.data = data;
                        var complete = scopeCallback(completed, this);
                        options.running = toHide.size() === 0 ? toShow.size() : toHide.size();
                        if (options.animated) {
                                if (!options.alwaysOpen && clickedActive) {
                                        $.ui.accordion.animations[options.animated]({
                                                toShow: jQuery([]),
                                                toHide: toHide,
                                                complete: complete,
                                                down: down,
                                                autoHeight: options.autoHeight
                                        });
                                } else {
                                        $.ui.accordion.animations[options.animated]({
                                                toShow: toShow,
                                                toHide: toHide,
                                                complete: complete,
                                                down: down,
                                                autoHeight: options.autoHeight
                                        });
                                }
                        } else {
                                if (!options.alwaysOpen && clickedActive) {
                                        toShow.toggle();
                                } else {
                                        toHide.hide();
                                        toShow.show();
                                }
                                complete(true);
                        }
                }


                function clickHandler(event) {
                        var options = $.data(this, "accordion").options;
                        if (options.disabled) {
                                return false;
                        }
                        if (!event.target && !options.alwaysOpen) {
                                options.active.parent().andSelf().toggleClass(options.selectedClass);
                                var toHide = options.active.next(),
                                        data = {
                                        options: options,
                                        newHeader: jQuery([]),
                                        oldHeader: options.active,
                                        newContent: jQuery([]),
                                        oldContent: toHide
                                },
                                        toShow = (options.active = $([]));
                                toggle.call(this, toShow, toHide, data);
                                return false;
                        }
                        var clicked = $(event.target);
                        clicked = $(clicked.parents(options.header)[0] || clicked);
                        var clickedActive = clicked[0] == options.active[0];
                        if (options.running || (options.alwaysOpen && clickedActive)) {
                                return false;
                        }
                        if (!clicked.is(options.header)) {
                                return;
                        }
                        options.active.parent().andSelf().toggleClass(options.selectedClass);
                        if (!clickedActive) {
                                clicked.parent().andSelf().addClass(options.selectedClass);
                        }
                        var toShow = clicked.next(),
                                toHide = options.active.next(),
                                data = {
                                options: options,
                                newHeader: clicked,
                                oldHeader: options.active,
                                newContent: toShow,
                                oldContent: toHide
                        },
                                down = options.headers.index(options.active[0]) > options.headers.index(clicked[0]);
                        options.active = clickedActive ? $([]) : clicked;
                        toggle.call(this, toShow, toHide, data, clickedActive, down);
                        return false;
                };

                function findActive(headers, selector) {
                        return selector != undefined ? typeof selector == "number" ? headers.filter(":eq(" + selector + ")") : headers.not(headers.not(selector)) : selector === false ? $([]) : headers.filter(":eq(0)");
                }
                $.extend($.ui.accordion, {
                        defaults: {
                                selectedClass: "selected",
                                alwaysOpen: true,
                                animated: 'slide',
                                event: "click",
                                header: "a",
                                autoHeight: true,
                                running: 0,
                                navigationFilter: function() {
                                        return this.href.toLowerCase() == location.href.toLowerCase();
                                }
                        },
                        animations: {
                                slide: function(options, additions) {
                                        options = $.extend({
                                                easing: "swing",
                                                duration: 300
                                        },
                                        options, additions);
                                        if (!options.toHide.size()) {
                                                options.toShow.animate({
                                                        height: "show"
                                                },
                                                options);
                                                return;
                                        }
                                        var hideHeight = options.toHide.height(),
                                                showHeight = options.toShow.height(),
                                                difference = showHeight / hideHeight;
                                        options.toShow.css({
                                                height: 0,
                                                overflow: 'hidden'
                                        }).show();
                                        options.toHide.filter(":hidden").each(options.complete).end().filter(":visible").animate({
                                                height: "hide"
                                        },
                                        {
                                                step: function(now) {
                                                        var current = (hideHeight - now) * difference;
                                                        if ($.browser.msie || $.browser.opera) {
                                                                current = Math.ceil(current);
                                                        }
                                                        options.toShow.height(current);
                                                },
                                                duration: options.duration,
                                                easing: options.easing,
                                                complete: function() {
                                                        if (!options.autoHeight) {
                                                                options.toShow.css("height", "auto");
                                                        }
                                                        options.complete();
                                                }
                                        });
                                },
                                bounceslide: function(options) {
                                        this.slide(options, {
                                                easing: options.down ? "bounceout" : "swing",
                                                duration: options.down ? 1000 : 200
                                        });
                                },
                                easeslide: function(options) {
                                        this.slide(options, {
                                                easing: "easeinout",
                                                duration: 700
                                        });
                                }
                        }
                });
                $.fn.activate = function(index) {
                        return this.accordion("activate", index);
                };
        })(jQuery);
        (function($) {
                var setDataSwitch = {
                        dragStart: "start.draggable",
                        drag: "drag.draggable",
                        dragStop: "stop.draggable",
                        maxHeight: "maxHeight.resizable",
                        minHeight: "minHeight.resizable",
                        maxWidth: "maxWidth.resizable",
                        minWidth: "minWidth.resizable",
                        resizeStart: "start.resizable",
                        resize: "drag.resizable",
                        resizeStop: "stop.resizable"
                };
                $.widget("ui.dialog", {
                        init: function() {
                                var self = this,
                                        options = this.options,
                                        resizeHandles = typeof options.resizable == 'string' ? options.resizable : 'n,e,s,w,se,sw,ne,nw',
                                uiDialogContent = this.element.addClass('ui-dialog-content').wrap('<div/>').wrap('<div/>'),
                                uiDialogContainer = (this.uiDialogContainer = uiDialogContent.parent().addClass('ui-dialog-container').css({
                                        position: 'relative',
                                        width: '100%',
                                        height: '100%'
                                })),
                                title = options.title || uiDialogContent.attr('title') || '',
                                uiDialogTitlebar = (this.uiDialogTitlebar = $('<div class="ui-dialog-titlebar"/>')).append('<span class="ui-dialog-title">' + title + '</span>').append('<a href="#" class="ui-dialog-titlebar-close"><span>X</span></a>').prependTo(uiDialogContainer),
                                uiDialog = (this.uiDialog = uiDialogContainer.parent()).appendTo(document.body).hide().addClass('ui-dialog').addClass(options.dialogClass).addClass(uiDialogContent.attr('className')).removeClass('ui-dialog-content').css({
                                        position: 'absolute',
                                        width: options.width,
                                        height: options.height,
                                        overflow: 'hidden',
                                        zIndex: options.zIndex
                                }).attr('tabIndex', -1).css('outline', 0).keydown(function(ev) {
                                        if (options.closeOnEscape) {
                                                var ESC = 27;
                                                (ev.keyCode && ev.keyCode == ESC && self.close());
                                        }
                                }).mousedown(function() {
                                        self.moveToTop();
                                }),
                                uiDialogButtonPane = (this.uiDialogButtonPane = $('<div/>')).addClass('ui-dialog-buttonpane').css({
                                        position: 'absolute',
                                        bottom: 0
                                }).appendTo(uiDialog);
                                this.uiDialogTitlebarClose = $('.ui-dialog-titlebar-close', uiDialogTitlebar).hover(function() {
                                        $(this).addClass('ui-dialog-titlebar-close-hover');
                                },
                                function() {
                                        $(this).removeClass('ui-dialog-titlebar-close-hover');
                                }).mousedown(function(ev) {
                                        ev.stopPropagation();
                                }).click(function() {
                                        self.close();
                                        return false;
                                });
                                this.uiDialogTitlebar.find("*").add(this.uiDialogTitlebar).each(function() {
                                        $.ui.disableSelection(this);
                                });
                                if ($.fn.draggable) {
                                        uiDialog.draggable({
                                                cancel: '.ui-dialog-content',
                                                helper: options.dragHelper,
                                                handle: '.ui-dialog-titlebar',
                                                start: function(e, ui) {
                                                        self.moveToTop();
                                                        (options.dragStart && options.dragStart.apply(self.element[0], arguments));
                                                },
                                                drag: function(e, ui) {
                                                        (options.drag && options.drag.apply(self.element[0], arguments));
                                                },
                                                stop: function(e, ui) {
                                                        (options.dragStop && options.dragStop.apply(self.element[0], arguments));
                                                        $.ui.dialog.overlay.resize();
                                                }
                                        });
                                        (options.draggable || uiDialog.draggable('disable'));
                                }
                                if ($.fn.resizable) {
                                        uiDialog.resizable({
                                                cancel: '.ui-dialog-content',
                                                helper: options.resizeHelper,
                                                maxWidth: options.maxWidth,
                                                maxHeight: options.maxHeight,
                                                minWidth: options.minWidth,
                                                minHeight: options.minHeight,
                                                start: function() {
                                                        (options.resizeStart && options.resizeStart.apply(self.element[0], arguments));
                                                },
                                                resize: function(e, ui) {
                                                        (options.autoResize && self.size.apply(self));
                                                        (options.resize && options.resize.apply(self.element[0], arguments));
                                                },
                                                handles: resizeHandles,
                                                stop: function(e, ui) {
                                                        (options.autoResize && self.size.apply(self));
                                                        (options.resizeStop && options.resizeStop.apply(self.element[0], arguments));
                                                        $.ui.dialog.overlay.resize();
                                                }
                                        });
                                        (options.resizable || uiDialog.resizable('disable'));
                                }
                                this.createButtons(options.buttons);
                                this.isOpen = false;
                                (options.bgiframe && $.fn.bgiframe && uiDialog.bgiframe());
                                (options.autoOpen && this.open());
                        },
                        setData: function(key, value) {
                                (setDataSwitch[key] && this.uiDialog.data(setDataSwitch[key], value));
                                switch (key) {
                                case "buttons":
                                        this.createButtons(value);
                                        break;
                                case "draggable":
                                        this.uiDialog.draggable(value ? 'enable' : 'disable');
                                        break;
                                case "height":
                                        this.uiDialog.height(value);
                                        break;
                                case "position":
                                        this.position(value);
                                        break;
                                case "resizable":
                                        (typeof value == 'string' && this.uiDialog.data('handles.resizable', value));
                                        this.uiDialog.resizable(value ? 'enable' : 'disable');
                                        break;
                                case "title":
                                        $(".ui-dialog-title", this.uiDialogTitlebar).text(value);
                                        break;
                                case "width":
                                        this.uiDialog.width(value);
                                        break;
                                }
                                $.widget.prototype.setData.apply(this, arguments);
                        },
                        position: function(pos) {
                                var wnd = $(window),
                                        doc = $(document),
                                        pTop = doc.scrollTop(),
                                        pLeft = doc.scrollLeft(),
                                        minTop = pTop;
                                if ($.inArray(pos, ['center', 'top', 'right', 'bottom', 'left']) >= 0) {
                                        pos = [pos == 'right' || pos == 'left' ? pos : 'center', pos == 'top' || pos == 'bottom' ? pos : 'middle'];
                                }
                                if (pos.constructor != Array) {
                                        pos = ['center', 'middle'];
                                }
                                if (pos[0].constructor == Number) {
                                        pLeft += pos[0];
                                } else {
                                        switch (pos[0]) {
                                        case 'left':
                                                pLeft += 0;
                                                break;
                                        case 'right':
                                                pLeft += wnd.width() - this.uiDialog.width();
                                                break;
                                        default:
                                        case 'center':
                                                pLeft += (wnd.width() - this.uiDialog.width()) / 2;
                                        }
                                }
                                if (pos[1].constructor == Number) {
                                        pTop += pos[1];
                                } else {
                                        switch (pos[1]) {
                                        case 'top':
                                                pTop += 0;
                                                break;
                                        case 'bottom':
                                                pTop += wnd.height() - this.uiDialog.height();
                                                break;
                                        default:
                                        case 'middle':
                                                pTop += (wnd.height() - this.uiDialog.height()) / 2;
                                        }
                                }
                                pTop = Math.max(pTop, minTop);
                                this.uiDialog.css({
                                        top: pTop,
                                        left: pLeft
                                });
                        },
                        size: function() {
                                var container = this.uiDialogContainer,
                                        titlebar = this.uiDialogTitlebar,
                                        content = this.element,
                                        tbMargin = parseInt(content.css('margin-top'), 10) + parseInt(content.css('margin-bottom'), 10),
                                        lrMargin = parseInt(content.css('margin-left'), 10) + parseInt(content.css('margin-right'), 10);
                                content.height(container.height() - titlebar.outerHeight() - tbMargin);
                                content.width(container.width() - lrMargin);
                        },
                        open: function() {
                                if (this.isOpen) {
                                        return;
                                }
                                this.overlay = this.options.modal ? new $.ui.dialog.overlay(this) : null;
                                (this.uiDialog.next().length > 0) && this.uiDialog.appendTo('body');
                                this.position(this.options.position);
                                this.uiDialog.show(this.options.show);
                                this.options.autoResize && this.size();
                                this.moveToTop(true);
                                var openEV = null;
                                var openUI = {
                                        options: this.options
                                };
                                this.uiDialogTitlebarClose.focus();
                                this.element.triggerHandler("dialogopen", [openEV, openUI], this.options.open);
                                this.isOpen = true;
                        },
                        moveToTop: function(force) {
                                if ((this.options.modal && !force) || (!this.options.stack && !this.options.modal)) {
                                        return this.element.triggerHandler("dialogfocus", [null, {
                                                options: this.options
                                        }], this.options.focus);
                                }
                                var maxZ = this.options.zIndex,
                                        options = this.options;
                                $('.ui-dialog:visible').each(function() {
                                        maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10) || options.zIndex);
                                });
                                (this.overlay && this.overlay.$el.css('z-index', ++maxZ));
                                this.uiDialog.css('z-index', ++maxZ);
                                this.element.triggerHandler("dialogfocus", [null, {
                                        options: this.options
                                }], this.options.focus);
                        },
                        close: function() {
                                (this.overlay && this.overlay.destroy());
                                this.uiDialog.hide(this.options.hide);
                                var closeEV = null;
                                var closeUI = {
                                        options: this.options
                                };
                                this.element.triggerHandler("dialogclose", [closeEV, closeUI], this.options.close);
                                $.ui.dialog.overlay.resize();
                                this.isOpen = false;
                        },
                        destroy: function() {
                                (this.overlay && this.overlay.destroy());
                                this.uiDialog.hide();
                                this.element.unbind('.dialog').removeData('dialog').removeClass('ui-dialog-content').hide().appendTo('body');
                                this.uiDialog.remove();
                        },
                        createButtons: function(buttons) {
                                var self = this,
                                        hasButtons = false,
                                        uiDialogButtonPane = this.uiDialogButtonPane;
                                uiDialogButtonPane.empty().hide();
                                $.each(buttons, function() {
                                        return ! (hasButtons = true);
                                });
                                if (hasButtons) {
                                        uiDialogButtonPane.show();
                                        $.each(buttons, function(name, fn) {
                                                $('<button/>').text(name).click(function() {
                                                        fn.apply(self.element[0], arguments);
                                                }).appendTo(uiDialogButtonPane);
                                        });
                                }
                        }
                });
                $.extend($.ui.dialog, {
                        defaults: {
                                autoOpen: true,
                                autoResize: true,
                                bgiframe: false,
                                buttons: {},
                                closeOnEscape: true,
                                draggable: true,
                                height: 200,
                                minHeight: 100,
                                minWidth: 150,
                                modal: false,
                                overlay: {},
                                position: 'center',
                                resizable: true,
                                stack: true,
                                width: 300,
                                zIndex: 1000
                        },
                        overlay: function(dialog) {
                                this.$el = $.ui.dialog.overlay.create(dialog);
                        }
                });
                $.extend($.ui.dialog.overlay, {
                        instances: [],
                        events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','), function(e) {
                                return e + '.dialog-overlay';
                        }).join(' '),
                        create: function(dialog) {
                                if (this.instances.length === 0) {
                                        setTimeout(function() {
                                                $('a, :input').bind($.ui.dialog.overlay.events, function() {
                                                        var allow = false;
                                                        var $dialog = $(this).parents('.ui-dialog');
                                                        if ($dialog.length) {
                                                                var $overlays = $('.ui-dialog-overlay');
                                                                if ($overlays.length) {
                                                                        var maxZ = parseInt($overlays.css('z-index'), 10);
                                                                        $overlays.each(function() {
                                                                                maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10));
                                                                        });
                                                                        allow = parseInt($dialog.css('z-index'), 10) > maxZ;
                                                                } else {
                                                                        allow = true;
                                                                }
                                                        }
                                                        return allow;
                                                });
                                        },
                                        1);
                                        $(document).bind('keydown.dialog-overlay', function(e) {
                                                var ESC = 27;
                                                (e.keyCode && e.keyCode == ESC && dialog.close());
                                        });
                                        $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
                                }
                                var $el = $('<div/>').appendTo(document.body).addClass('ui-dialog-overlay').css($.extend({
                                        borderWidth: 0,
                                        margin: 0,
                                        padding: 0,
                                        position: 'absolute',
                                        top: 0,
                                        left: 0,
                                        width: this.width(),
                                        height: this.height()
                                },
                                dialog.options.overlay));
                                (dialog.options.bgiframe && $.fn.bgiframe && $el.bgiframe());
                                this.instances.push($el);
                                return $el;
                        },
                        destroy: function($el) {
                                this.instances.splice($.inArray(this.instances, $el), 1);
                                if (this.instances.length === 0) {
                                        $('a, :input').add([document, window]).unbind('.dialog-overlay');
                                }
                                $el.remove();
                        },
                        height: function() {
                                if ($.browser.msie && $.browser.version < 7) {
                                        var scrollHeight = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);
                                        var offsetHeight = Math.max(document.documentElement.offsetHeight, document.body.offsetHeight);
                                        if (scrollHeight < offsetHeight) {
                                                return $(window).height() + 'px';
                                        } else {
                                                return scrollHeight + 'px';
                                        }
                                } else {
                                        return $(document).height() + 'px';
                                }
                        },
                        width: function() {
                                if ($.browser.msie && $.browser.version < 7) {
                                        var scrollWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);
                                        var offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
                                        if (scrollWidth < offsetWidth) {
                                                return $(window).width() + 'px';
                                        } else {
                                                return scrollWidth + 'px';
                                        }
                                } else {
                                        return $(document).width() + 'px';
                                }
                        },
                        resize: function() {
                                var $overlays = $([]);
                                $.each($.ui.dialog.overlay.instances, function() {
                                        $overlays = $overlays.add(this);
                                });
                                $overlays.css({
                                        width: 0,
                                        height: 0
                                }).css({
                                        width: $.ui.dialog.overlay.width(),
                                        height: $.ui.dialog.overlay.height()
                                });
                        }
                });
                $.extend($.ui.dialog.overlay.prototype, {
                        destroy: function() {
                                $.ui.dialog.overlay.destroy(this.$el);
                        }
                });
        })(jQuery);
        (function($) {
                $.fn.unwrap = $.fn.unwrap ||
                function(expr) {
                        return this.each(function() {
                                $(this).parents(expr).eq(0).after(this).remove();
                        });
                };
                $.widget("ui.slider", {
                        plugins: {},
                        ui: function(e) {
                                return {
                                        options: this.options,
                                        handle: this.currentHandle,
                                        value: this.options.axis != "both" || !this.options.axis ? Math.round(this.value(null, this.options.axis == "vertical" ? "y" : "x")) : {
                                                x: Math.round(this.value(null, "x")),
                                                y: Math.round(this.value(null, "y"))
                                        },
                                        range: this.getRange()
                                };
                        },
                        propagate: function(n, e) {
                                $.ui.plugin.call(this, n, [e, this.ui()]);
                                this.element.triggerHandler(n == "slide" ? n : "slide" + n, [e, this.ui()], this.options[n]);
                        },
                        destroy: function() {
                                this.element.removeClass("ui-slider ui-slider-disabled").removeData("slider").unbind(".slider");
                                if (this.handle && this.handle.length) {
                                        this.handle.unwrap("a");
                                        this.handle.each(function() {
                                                $(this).data("mouse").mouseDestroy();
                                        });
                                }
                                this.generated && this.generated.remove();
                        },
                        setData: function(key, value) {
                                $.widget.prototype.setData.apply(this, arguments);
                                if (/min|max|steps/.test(key)) {
                                        this.initBoundaries();
                                }
                                if (key == "range") {
                                        value ? this.handle.length == 2 && this.createRange() : this.removeRange();
                                }
                        },
                        init: function() {
                                var self = this;
                                this.element.addClass("ui-slider");
                                this.initBoundaries();
                                this.handle = $(this.options.handle, this.element);
                                if (!this.handle.length) {
                                        self.handle = self.generated = $(self.options.handles || [0]).map(function() {
                                                var handle = $("<div/>").addClass("ui-slider-handle").appendTo(self.element);
                                                if (this.id) handle.attr("id", this.id);
                                                return handle[0];
                                        });
                                }
                                var handleclass = function(el) {
                                        this.element = $(el);
                                        this.element.data("mouse", this);
                                        this.options = self.options;
                                        this.element.bind("mousedown", function() {
                                                if (self.currentHandle) this.blur(self.currentHandle);
                                                self.focus(this, 1);
                                        });
                                        this.mouseInit();
                                };
                                $.extend(handleclass.prototype, $.ui.mouse, {
                                        mouseStart: function(e) {
                                                return self.start.call(self, e, this.element[0]);
                                        },
                                        mouseStop: function(e) {
                                                return self.stop.call(self, e, this.element[0]);
                                        },
                                        mouseDrag: function(e) {
                                                return self.drag.call(self, e, this.element[0]);
                                        },
                                        mouseCapture: function() {
                                                return true;
                                        },
                                        trigger: function(e) {
                                                this.mouseDown(e);
                                        }
                                });
                                $(this.handle).each(function() {
                                        new handleclass(this);
                                }).wrap('<a href="javascript:void(0)" style="outline:none;border:none;"></a>').parent().bind('focus', function(e) {
                                        self.focus(this.firstChild);
                                }).bind('blur', function(e) {
                                        self.blur(this.firstChild);
                                }).bind('keydown', function(e) {
                                        if (!self.options.noKeyboard) self.keydown(e.keyCode, this.firstChild);
                                });
                                this.element.bind('mousedown.slider', function(e) {
                                        self.click.apply(self, [e]);
                                        self.currentHandle.data("mouse").trigger(e);
                                        self.firstValue = self.firstValue + 1;
                                });
                                $.each(this.options.handles || [], function(index, handle) {
                                        self.moveTo(handle.start, index, true);
                                });
                                if (!isNaN(this.options.startValue)) this.moveTo(this.options.startValue, 0, true);
                                this.previousHandle = $(this.handle[0]);
                                if (this.handle.length == 2 && this.options.range) this.createRange();
                        },
                        initBoundaries: function() {
                                var element = this.element[0],
                                        o = this.options;
                                this.actualSize = {
                                        width: this.element.outerWidth(),
                                        height: this.element.outerHeight()
                                };
                                $.extend(o, {
                                        axis: o.axis || (element.offsetWidth < element.offsetHeight ? 'vertical' : 'horizontal'),
                                        max: !isNaN(parseInt(o.max, 10)) ? {
                                                x: parseInt(o.max, 10),
                                                y: parseInt(o.max, 10)
                                        } : ({
                                                x: o.max && o.max.x || 100,
                                                y: o.max && o.max.y || 100
                                        }),
                                        min: !isNaN(parseInt(o.min, 10)) ? {
                                                x: parseInt(o.min, 10),
                                                y: parseInt(o.min, 10)
                                        } : ({
                                                x: o.min && o.min.x || 0,
                                                y: o.min && o.min.y || 0
                                        })
                                });
                                o.realMax = {
                                        x: o.max.x - o.min.x,
                                        y: o.max.y - o.min.y
                                };
                                o.stepping = {
                                        x: o.stepping && o.stepping.x || parseInt(o.stepping, 10) || (o.steps ? o.realMax.x / (o.steps.x || parseInt(o.steps, 10) || o.realMax.x) : 0),
                                        y: o.stepping && o.stepping.y || parseInt(o.stepping, 10) || (o.steps ? o.realMax.y / (o.steps.y || parseInt(o.steps, 10) || o.realMax.y) : 0)
                                };
                        },
                        keydown: function(keyCode, handle) {
                                if (/(37|38|39|40)/.test(keyCode)) {
                                        this.moveTo({
                                                x: /(37|39)/.test(keyCode) ? (keyCode == 37 ? '-' : '+') + '=' + this.oneStep("x") : 0,
                                                y: /(38|40)/.test(keyCode) ? (keyCode == 38 ? '-' : '+') + '=' + this.oneStep("y") : 0
                                        },
                                        handle);
                                }
                        },
                        focus: function(handle, hard) {
                                this.currentHandle = $(handle).addClass('ui-slider-handle-active');
                                if (hard) this.currentHandle.parent()[0].focus();
                        },
                        blur: function(handle) {
                                $(handle).removeClass('ui-slider-handle-active');
                                if (this.currentHandle && this.currentHandle[0] == handle) {
                                        this.previousHandle = this.currentHandle;
                                        this.currentHandle = null;
                                };
                        },
                        click: function(e) {
                                var pointer = [e.pageX, e.pageY];
                                var clickedHandle = false;
                                this.handle.each(function() {
                                        if (this == e.target) clickedHandle = true;
                                });
                                if (clickedHandle || this.options.disabled || !(this.currentHandle || this.previousHandle)) return;
                                if (!this.currentHandle && this.previousHandle) this.focus(this.previousHandle, true);
                                this.offset = this.element.offset();
                                this.moveTo({
                                        y: this.convertValue(e.pageY - this.offset.top - this.currentHandle[0].offsetHeight / 2, "y"),
                                        x: this.convertValue(e.pageX - this.offset.left - this.currentHandle[0].offsetWidth / 2, "x")
                                },
                                null, !this.options.distance);
                        },
                        createRange: function() {
                                if (this.rangeElement) return;
                                this.rangeElement = $('<div></div>').addClass('ui-slider-range').css({
                                        position: 'absolute'
                                }).appendTo(this.element);
                                this.updateRange();
                        },
                        removeRange: function() {
                                this.rangeElement.remove();
                                this.rangeElement = null;
                        },
                        updateRange: function() {
                                var prop = this.options.axis == "vertical" ? "top" : "left";
                                var size = this.options.axis == "vertical" ? "height" : "width";
                                this.rangeElement.css(prop, (parseInt($(this.handle[0]).css(prop), 10) || 0) + this.handleSize(0, this.options.axis == "vertical" ? "y" : "x") / 2);
                                this.rangeElement.css(size, (parseInt($(this.handle[1]).css(prop), 10) || 0) - (parseInt($(this.handle[0]).css(prop), 10) || 0));
                        },
                        getRange: function() {
                                return this.rangeElement ? this.convertValue(parseInt(this.rangeElement.css(this.options.axis == "vertical" ? "height" : "width"), 10), this.options.axis == "vertical" ? "y" : "x") : null;
                        },
                        handleIndex: function() {
                                return this.handle.index(this.currentHandle[0]);
                        },
                        value: function(handle, axis) {
                                if (this.handle.length == 1) this.currentHandle = this.handle;
                                if (!axis) axis = this.options.axis == "vertical" ? "y" : "x";
                                var curHandle = $(handle != undefined && handle !== null ? this.handle[handle] || handle : this.currentHandle);
                                if (curHandle.data("mouse").sliderValue) {
                                        return parseInt(curHandle.data("mouse").sliderValue[axis], 10);
                                } else {
                                        return parseInt(((parseInt(curHandle.css(axis == "x" ? "left" : "top"), 10) / (this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(handle, axis))) * this.options.realMax[axis]) + this.options.min[axis], 10);
                                }
                        },
                        convertValue: function(value, axis) {
                                return this.options.min[axis] + (value / (this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null, axis))) * this.options.realMax[axis];
                        },
                        translateValue: function(value, axis) {
                                return ((value - this.options.min[axis]) / this.options.realMax[axis]) * (this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null, axis));
                        },
                        translateRange: function(value, axis) {
                                if (this.rangeElement) {
                                        if (this.currentHandle[0] == this.handle[0] && value >= this.translateValue(this.value(1), axis)) value = this.translateValue(this.value(1, axis) - this.oneStep(axis), axis);
                                        if (this.currentHandle[0] == this.handle[1] && value <= this.translateValue(this.value(0), axis)) value = this.translateValue(this.value(0, axis) + this.oneStep(axis), axis);
                                }
                                if (this.options.handles) {
                                        var handle = this.options.handles[this.handleIndex()];
                                        if (value < this.translateValue(handle.min, axis)) {
                                                value = this.translateValue(handle.min, axis);
                                        } else if (value > this.translateValue(handle.max, axis)) {
                                                value = this.translateValue(handle.max, axis);
                                        }
                                }
                                return value;
                        },
                        translateLimits: function(value, axis) {
                                if (value >= this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null, axis)) value = this.actualSize[axis == "x" ? "width" : "height"] - this.handleSize(null, axis);
                                if (value <= 0) value = 0;
                                return value;
                        },
                        handleSize: function(handle, axis) {
                                return $(handle != undefined && handle !== null ? this.handle[handle] : this.currentHandle)[0]["offset" + (axis == "x" ? "Width" : "Height")];
                        },
                        oneStep: function(axis) {
                                return this.options.stepping[axis] || 1;
                        },
                        start: function(e, handle) {
                                var o = this.options;
                                if (o.disabled) return false;
                                this.actualSize = {
                                        width: this.element.outerWidth(),
                                        height: this.element.outerHeight()
                                };
                                if (!this.currentHandle) this.focus(this.previousHandle, true);
                                this.offset = this.element.offset();
                                this.handleOffset = this.currentHandle.offset();
                                this.clickOffset = {
                                        top: e.pageY - this.handleOffset.top,
                                        left: e.pageX - this.handleOffset.left
                                };
                                this.firstValue = this.value();
                                this.propagate('start', e);
                                this.drag(e, handle);
                                return true;
                        },
                        stop: function(e) {
                                this.propagate('stop', e);
                                if (this.firstValue != this.value()) this.propagate('change', e);
                                this.focus(this.currentHandle, true);
                                return false;
                        },
                        drag: function(e, handle) {
                                var o = this.options;
                                var position = {
                                        top: e.pageY - this.offset.top - this.clickOffset.top,
                                        left: e.pageX - this.offset.left - this.clickOffset.left
                                };
                                if (!this.currentHandle) this.focus(this.previousHandle, true);
                                position.left = this.translateLimits(position.left, "x");
                                position.top = this.translateLimits(position.top, "y");
                                if (o.stepping.x) {
                                        var value = this.convertValue(position.left, "x");
                                        value = Math.round(value / o.stepping.x) * o.stepping.x;
                                        position.left = this.translateValue(value, "x");
                                }
                                if (o.stepping.y) {
                                        var value = this.convertValue(position.top, "y");
                                        value = Math.round(value / o.stepping.y) * o.stepping.y;
                                        position.top = this.translateValue(value, "y");
                                }
                                position.left = this.translateRange(position.left, "x");
                                position.top = this.translateRange(position.top, "y");
                                if (o.axis != "vertical") this.currentHandle.css({
                                        left: position.left
                                });
                                if (o.axis != "horizontal") this.currentHandle.css({
                                        top: position.top
                                });
                                this.currentHandle.data("mouse").sliderValue = {
                                        x: Math.round(this.convertValue(position.left, "x")) || 0,
                                        y: Math.round(this.convertValue(position.top, "y")) || 0
                                };
                                if (this.rangeElement) this.updateRange();
                                this.propagate('slide', e);
                                return false;
                        },
                        moveTo: function(value, handle, noPropagation) {
                                var o = this.options;
                                this.actualSize = {
                                        width: this.element.outerWidth(),
                                        height: this.element.outerHeight()
                                };
                                if (handle == undefined && !this.currentHandle && this.handle.length != 1) return false;
                                if (handle == undefined && !this.currentHandle) handle = 0;
                                if (handle != undefined) this.currentHandle = this.previousHandle = $(this.handle[handle] || handle);
                                if (value.x !== undefined && value.y !== undefined) {
                                        var x = value.x,
                                                y = value.y;
                                } else {
                                        var x = value,
                                                y = value;
                                }
                                if (x !== undefined && x.constructor != Number) {
                                        var me = /^\-\=/.test(x),
                                                pe = /^\+\=/.test(x);
                                        if (me || pe) {
                                                x = this.value(null, "x") + parseInt(x.replace(me ? '=' : '+=', ''), 10);
                                        } else {
                                                x = isNaN(parseInt(x, 10)) ? undefined : parseInt(x, 10);
                                        }
                                }
                                if (y !== undefined && y.constructor != Number) {
                                        var me = /^\-\=/.test(y),
                                                pe = /^\+\=/.test(y);
                                        if (me || pe) {
                                                y = this.value(null, "y") + parseInt(y.replace(me ? '=' : '+=', ''), 10);
                                        } else {
                                                y = isNaN(parseInt(y, 10)) ? undefined : parseInt(y, 10);
                                        }
                                }
                                if (o.axis != "vertical" && x !== undefined) {
                                        if (o.stepping.x) x = Math.round(x / o.stepping.x) * o.stepping.x;
                                        x = this.translateValue(x, "x");
                                        x = this.translateLimits(x, "x");
                                        x = this.translateRange(x, "x");
                                        o.animate ? this.currentHandle.stop().animate({
                                                left: x
                                        },
                                        (Math.abs(parseInt(this.currentHandle.css("left")) - x)) * (!isNaN(parseInt(o.animate)) ? o.animate : 5)) : this.currentHandle.css({
                                                left: x
                                        });
                                }
                                if (o.axis != "horizontal" && y !== undefined) {
                                        if (o.stepping.y) y = Math.round(y / o.stepping.y) * o.stepping.y;
                                        y = this.translateValue(y, "y");
                                        y = this.translateLimits(y, "y");
                                        y = this.translateRange(y, "y");
                                        o.animate ? this.currentHandle.stop().animate({
                                                top: y
                                        },
                                        (Math.abs(parseInt(this.currentHandle.css("top")) - y)) * (!isNaN(parseInt(o.animate)) ? o.animate : 5)) : this.currentHandle.css({
                                                top: y
                                        });
                                }
                                if (this.rangeElement) this.updateRange();
                                this.currentHandle.data("mouse").sliderValue = {
                                        x: Math.round(this.convertValue(x, "x")) || 0,
                                        y: Math.round(this.convertValue(y, "y")) || 0
                                };
                                if (!noPropagation) {
                                        this.propagate('start', null);
                                        this.propagate('stop', null);
                                        this.propagate('change', null);
                                        this.propagate("slide", null);
                                }
                        }
                });
                $.ui.slider.getter = "value";
                $.ui.slider.defaults = {
                        handle: ".ui-slider-handle",
                        distance: 1,
                        animate: false
                };
        })(jQuery);
        (function($) {
                $.widget("ui.tabs", {
                        init: function() {
                                this.options.event += '.tabs';
                                this.tabify(true);
                        },
                        setData: function(key, value) {
                                if ((/^selected/).test(key)) this.select(value);
                                else {
                                        this.options[key] = value;
                                        this.tabify();
                                }
                        },
                        length: function() {
                                return this.$tabs.length;
                        },
                        tabId: function(a) {
                                return a.title && a.title.replace(/\s/g, '_').replace(/[^A-Za-z0-9\-_:\.]/g, '') || this.options.idPrefix + $.data(a);
                        },
                        ui: function(tab, panel) {
                                return {
                                        options: this.options,
                                        tab: tab,
                                        panel: panel,
                                        index: this.$tabs.index(tab)
                                };
                        },
                        tabify: function(init) {
                                this.$lis = $('li:has(a[href])', this.element);
                                this.$tabs = this.$lis.map(function() {
                                        return $('a', this)[0];
                                });
                                this.$panels = $([]);
                                var self = this,
                                        o = this.options;
                                this.$tabs.each(function(i, a) {
                                        if (a.hash && a.hash.replace('#', '')) self.$panels = self.$panels.add(a.hash);
                                        else if ($(a).attr('href') != '#') {
                                                $.data(a, 'href.tabs', a.href);
                                                $.data(a, 'load.tabs', a.href);
                                                var id = self.tabId(a);
                                                a.href = '#' + id;
                                                var $panel = $('#' + id);
                                                if (!$panel.length) {
                                                        $panel = $(o.panelTemplate).attr('id', id).addClass(o.panelClass).insertAfter(self.$panels[i - 1] || self.element);
                                                        $panel.data('destroy.tabs', true);
                                                }
                                                self.$panels = self.$panels.add($panel);
                                        } else o.disabled.push(i + 1);
                                });
                                if (init) {
                                        this.element.addClass(o.navClass);
                                        this.$panels.each(function() {
                                                var $this = $(this);
                                                $this.addClass(o.panelClass);
                                        });
                                        if (o.selected === undefined) {
                                                if (location.hash) {
                                                        this.$tabs.each(function(i, a) {
                                                                if (a.hash == location.hash) {
                                                                        o.selected = i;
                                                                        if ($.browser.msie || $.browser.opera) {
                                                                                var $toShow = $(location.hash),
                                                                                        toShowId = $toShow.attr('id');
                                                                                $toShow.attr('id', '');
                                                                                setTimeout(function() {
                                                                                        $toShow.attr('id', toShowId);
                                                                                },
                                                                                500);
                                                                        }
                                                                        scrollTo(0, 0);
                                                                        return false;
                                                                }
                                                        });
                                                } else if (o.cookie) {
                                                        var index = parseInt($.cookie('ui-tabs' + $.data(self.element)), 10);
                                                        if (index && self.$tabs[index]) o.selected = index;
                                                } else if (self.$lis.filter('.' + o.selectedClass).length) o.selected = self.$lis.index(self.$lis.filter('.' + o.selectedClass)[0]);
                                        }
                                        o.selected = o.selected === null || o.selected !== undefined ? o.selected : 0;
                                        o.disabled = $.unique(o.disabled.concat($.map(this.$lis.filter('.' + o.disabledClass), function(n, i) {
                                                return self.$lis.index(n);
                                        }))).sort();
                                        if ($.inArray(o.selected, o.disabled) != -1) o.disabled.splice($.inArray(o.selected, o.disabled), 1);
                                        this.$panels.addClass(o.hideClass);
                                        this.$lis.removeClass(o.selectedClass);
                                        if (o.selected !== null) {
                                                this.$panels.eq(o.selected).show().removeClass(o.hideClass);
                                                this.$lis.eq(o.selected).addClass(o.selectedClass);
                                                var onShow = function() {
                                                        $(self.element).triggerHandler('tabsshow', [self.fakeEvent('tabsshow'), self.ui(self.$tabs[o.selected], self.$panels[o.selected])], o.show);
                                                };
                                                if ($.data(this.$tabs[o.selected], 'load.tabs')) this.load(o.selected, onShow);
                                                else onShow();
                                        }
                                        $(window).bind('unload', function() {
                                                self.$tabs.unbind('.tabs');
                                                self.$lis = self.$tabs = self.$panels = null;
                                        });
                                }
                                for (var i = 0, li; li = this.$lis[i]; i++)
                                $(li)[$.inArray(i, o.disabled) != -1 && !$(li).hasClass(o.selectedClass) ? 'addClass' : 'removeClass'](o.disabledClass);
                                if (o.cache === false) this.$tabs.removeData('cache.tabs');
                                var hideFx, showFx, baseFx = {
                                        'min-width': 0,
                                        duration: 1
                                },
                                        baseDuration = 'normal';
                                if (o.fx && o.fx.constructor == Array) hideFx = o.fx[0] || baseFx,
                                showFx = o.fx[1] || baseFx;
                                else hideFx = showFx = o.fx || baseFx;
                                var resetCSS = {
                                        display: '',
                                        overflow: '',
                                        height: ''
                                };
                                if (!$.browser.msie) resetCSS.opacity = '';

                                function hideTab(clicked, $hide, $show) {
                                        $hide.animate(hideFx, hideFx.duration || baseDuration, function() {
                                                $hide.addClass(o.hideClass).css(resetCSS);
                                                if ($.browser.msie && hideFx.opacity) $hide[0].style.filter = '';
                                                if ($show) showTab(clicked, $show, $hide);
                                        });
                                }


                                function showTab(clicked, $show, $hide) {
                                        if (showFx === baseFx) $show.css('display', 'block');
                                        $show.animate(showFx, showFx.duration || baseDuration, function() {
                                                $show.removeClass(o.hideClass).css(resetCSS);
                                                if ($.browser.msie && showFx.opacity) $show[0].style.filter = '';
                                                $(self.element).triggerHandler('tabsshow', [self.fakeEvent('tabsshow'), self.ui(clicked, $show[0])], o.show);
                                        });
                                }


                                function switchTab(clicked, $li, $hide, $show) {
                                        $li.addClass(o.selectedClass).siblings().removeClass(o.selectedClass);
                                        hideTab(clicked, $hide, $show);
                                }
                                this.$tabs.unbind('.tabs').bind(o.event, function() {
                                        var $li = $(this).parents('li:eq(0)'),
                                                $hide = self.$panels.filter(':visible'),
                                                $show = $(this.hash);
                                        if (($li.hasClass(o.selectedClass) && !o.unselect) || $li.hasClass(o.disabledClass) || $(this).hasClass(o.loadingClass) || $(self.element).triggerHandler('tabsselect', [self.fakeEvent('tabsselect'), self.ui(this, $show[0])], o.select) === false) {
                                                this.blur();
                                                return false;
                                        }
                                        self.options.selected = self.$tabs.index(this);
                                        if (o.unselect) {
                                                if ($li.hasClass(o.selectedClass)) {
                                                        self.options.selected = null;
                                                        $li.removeClass(o.selectedClass);
                                                        self.$panels.stop();
                                                        hideTab(this, $hide);
                                                        this.blur();
                                                        return false;
                                                } else if (!$hide.length) {
                                                        self.$panels.stop();
                                                        var a = this;
                                                        self.load(self.$tabs.index(this), function() {
                                                                $li.addClass(o.selectedClass).addClass(o.unselectClass);
                                                                showTab(a, $show);
                                                        });
                                                        this.blur();
                                                        return false;
                                                }
                                        }
                                        if (o.cookie) $.cookie('ui-tabs' + $.data(self.element), self.options.selected, o.cookie);
                                        self.$panels.stop();
                                        if ($show.length) {
                                                var a = this;
                                                self.load(self.$tabs.index(this), $hide.length ?
                                                function() {
                                                        switchTab(a, $li, $hide, $show);
                                                } : function() {
                                                        $li.addClass(o.selectedClass);
                                                        showTab(a, $show);
                                                });
                                        } else throw 'jQuery UI Tabs: Mismatching fragment identifier.';
                                        if ($.browser.msie) this.blur();
                                        return false;
                                });
                                if (! (/^click/).test(o.event)) this.$tabs.bind('click.tabs', function() {
                                        return false;
                                });
                        },
                        add: function(url, label, index) {
                                if (index == undefined) index = this.$tabs.length;
                                var o = this.options;
                                var $li = $(o.tabTemplate.replace(/#\{href\}/g, url).replace(/#\{label\}/g, label));
                                $li.data('destroy.tabs', true);
                                var id = url.indexOf('#') == 0 ? url.replace('#', '') : this.tabId($('a:first-child', $li)[0]);
                                var $panel = $('#' + id);
                                if (!$panel.length) {
                                        $panel = $(o.panelTemplate).attr('id', id).addClass(o.hideClass).data('destroy.tabs', true);
                                }
                                $panel.addClass(o.panelClass);
                                if (index >= this.$lis.length) {
                                        $li.appendTo(this.element);
                                        $panel.appendTo(this.element[0].parentNode);
                                } else {
                                        $li.insertBefore(this.$lis[index]);
                                        $panel.insertBefore(this.$panels[index]);
                                }
                                o.disabled = $.map(o.disabled, function(n, i) {
                                        return n >= index ? ++n : n
                                });
                                this.tabify();
                                if (this.$tabs.length == 1) {
                                        $li.addClass(o.selectedClass);
                                        $panel.removeClass(o.hideClass);
                                        var href = $.data(this.$tabs[0], 'load.tabs');
                                        if (href) this.load(index, href);
                                }
                                this.element.triggerHandler('tabsadd', [this.fakeEvent('tabsadd'), this.ui(this.$tabs[index], this.$panels[index])], o.add);
                        },
                        remove: function(index) {
                                var o = this.options,
                                        $li = this.$lis.eq(index).remove(),
                                        $panel = this.$panels.eq(index).remove();
                                if ($li.hasClass(o.selectedClass) && this.$tabs.length > 1) this.select(index + (index + 1 < this.$tabs.length ? 1 : -1));
                                o.disabled = $.map($.grep(o.disabled, function(n, i) {
                                        return n != index;
                                }), function(n, i) {
                                        return n >= index ? --n : n
                                });
                                this.tabify();
                                this.element.triggerHandler('tabsremove', [this.fakeEvent('tabsremove'), this.ui($li.find('a')[0], $panel[0])], o.remove);
                        },
                        enable: function(index) {
                                var o = this.options;
                                if ($.inArray(index, o.disabled) == -1) return;
                                var $li = this.$lis.eq(index).removeClass(o.disabledClass);
                                if ($.browser.safari) {
                                        $li.css('display', 'inline-block');
                                        setTimeout(function() {
                                                $li.css('display', 'block');
                                        },
                                        0);
                                }
                                o.disabled = $.grep(o.disabled, function(n, i) {
                                        return n != index;
                                });
                                this.element.triggerHandler('tabsenable', [this.fakeEvent('tabsenable'), this.ui(this.$tabs[index], this.$panels[index])], o.enable);
                        },
                        disable: function(index) {
                                var self = this,
                                        o = this.options;
                                if (index != o.selected) {
                                        this.$lis.eq(index).addClass(o.disabledClass);
                                        o.disabled.push(index);
                                        o.disabled.sort();
                                        this.element.triggerHandler('tabsdisable', [this.fakeEvent('tabsdisable'), this.ui(this.$tabs[index], this.$panels[index])], o.disable);
                                }
                        },
                        select: function(index) {
                                if (typeof index == 'string') index = this.$tabs.index(this.$tabs.filter('[href$=' + index + ']')[0]);
                                this.$tabs.eq(index).trigger(this.options.event);
                        },
                        load: function(index, callback) {
                                var self = this,
                                        o = this.options,
                                        $a = this.$tabs.eq(index),
                                        a = $a[0],
                                        bypassCache = callback == undefined || callback === false,
                                        url = $a.data('load.tabs');
                                callback = callback ||
                                function() {};
                                if (!url || !bypassCache && $.data(a, 'cache.tabs')) {
                                        callback();
                                        return;
                                }
                                var inner = function(parent) {
                                        var $parent = $(parent),
                                                $inner = $parent.find('*:last');
                                        return $inner.length && $inner.is(':not(img)') && $inner || $parent;
                                };
                                var cleanup = function() {
                                        self.$tabs.filter('.' + o.loadingClass).removeClass(o.loadingClass).each(function() {
                                                if (o.spinner) inner(this).parent().html(inner(this).data('label.tabs'));
                                        });
                                        self.xhr = null;
                                };
                                if (o.spinner) {
                                        var label = inner(a).html();
                                        inner(a).wrapInner('<em></em>').find('em').data('label.tabs', label).html(o.spinner);
                                }
                                var ajaxOptions = $.extend({},
                                o.ajaxOptions, {
                                        url: url,
                                        success: function(r, s) {
                                                $(a.hash).html(r);
                                                cleanup();
                                                if (o.cache) $.data(a, 'cache.tabs', true);
                                                $(self.element).triggerHandler('tabsload', [self.fakeEvent('tabsload'), self.ui(self.$tabs[index], self.$panels[index])], o.load);
                                                o.ajaxOptions.success && o.ajaxOptions.success(r, s);
                                                callback();
                                        }
                                });
                                if (this.xhr) {
                                        this.xhr.abort();
                                        cleanup();
                                }
                                $a.addClass(o.loadingClass);
                                setTimeout(function() {
                                        self.xhr = $.ajax(ajaxOptions);
                                },
                                0);
                        },
                        url: function(index, url) {
                                this.$tabs.eq(index).removeData('cache.tabs').data('load.tabs', url);
                        },
                        destroy: function() {
                                var o = this.options;
                                this.element.unbind('.tabs').removeClass(o.navClass).removeData('tabs');
                                this.$tabs.each(function() {
                                        var href = $.data(this, 'href.tabs');
                                        if (href) this.href = href;
                                        var $this = $(this).unbind('.tabs');
                                        $.each(['href', 'load', 'cache'], function(i, prefix) {
                                                $this.removeData(prefix + '.tabs');
                                        });
                                });
                                this.$lis.add(this.$panels).each(function() {
                                        if ($.data(this, 'destroy.tabs')) $(this).remove();
                                        else $(this).removeClass([o.selectedClass, o.unselectClass, o.disabledClass, o.panelClass, o.hideClass].join(' '));
                                });
                        },
                        fakeEvent: function(type) {
                                return $.event.fix({
                                        type: type,
                                        target: this.element[0]
                                });
                        }
                });
                $.ui.tabs.defaults = {
                        unselect: false,
                        event: 'click',
                        disabled: [],
                        cookie: null,
                        spinner: 'Loading&#8230;',
                        cache: false,
                        idPrefix: 'ui-tabs-',
                        ajaxOptions: {},
                        fx: null,
                        tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>',
                        panelTemplate: '<div></div>',
                        navClass: 'ui-tabs-nav',
                        selectedClass: 'ui-tabs-selected',
                        unselectClass: 'ui-tabs-unselect',
                        disabledClass: 'ui-tabs-disabled',
                        panelClass: 'ui-tabs-panel',
                        hideClass: 'ui-tabs-hide',
                        loadingClass: 'ui-tabs-loading'
                };
                $.ui.tabs.getter = "length";
                $.extend($.ui.tabs.prototype, {
                        rotation: null,
                        rotate: function(ms, continuing) {
                                continuing = continuing || false;
                                var self = this,
                                        t = this.options.selected;

                                function start() {
                                        self.rotation = setInterval(function() {
                                                t = ++t < self.$tabs.length ? t : 0;
                                                self.select(t);
                                        },
                                        ms);
                                }


                                function stop(e) {
                                        if (!e || e.clientX) {
                                                clearInterval(self.rotation);
                                        }
                                }
                                if (ms) {
                                        start();
                                        if (!continuing) this.$tabs.bind(this.options.event, stop);
                                        else this.$tabs.bind(this.options.event, function() {
                                                stop();
                                                t = self.options.selected;
                                                start();
                                        });
                                } else {
                                        stop();
                                        this.$tabs.unbind(this.options.event, stop);
                                }
                        }
                });
        })(jQuery);
        (function($) {
                var PROP_NAME = 'datepicker';

                function Datepicker() {
                        this.debug = false;
                        this._curInst = null;
                        this._disabledInputs = [];
                        this._datepickerShowing = false;
                        this._inDialog = false;
                        this._mainDivId = 'ui-datepicker-div';
                        this._appendClass = 'ui-datepicker-append';
                        this._triggerClass = 'ui-datepicker-trigger';
                        this._dialogClass = 'ui-datepicker-dialog';
                        this._promptClass = 'ui-datepicker-prompt';
                        this._unselectableClass = 'ui-datepicker-unselectable';
                        this._currentClass = 'ui-datepicker-current-day';
                        this.regional = [];
                        this.regional[''] = {
                                clearText: 'Clear',
                                clearStatus: 'Erase the current date',
                                closeText: 'Close',
                                closeStatus: 'Close without change',
                                prevText: '&#x3c;Prev',
                                prevStatus: 'Show the previous month',
                                nextText: 'Next&#x3e;',
                                nextStatus: 'Show the next month',
                                currentText: 'Today',
                                currentStatus: 'Show the current month',
                                monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
                                monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
                                monthStatus: 'Show a different month',
                                yearStatus: 'Show a different year',
                                weekHeader: 'Wk',
                                weekStatus: 'Week of the year',
                                dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
                                dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
                                dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
                                dayStatus: 'Set DD as first week day',
                                dateStatus: 'Select DD, M d',
                                dateFormat: 'mm/dd/yy',
                                firstDay: 0,
                                initStatus: 'Select a date',
                                isRTL: false
                        };
                        this._defaults = {
                                showOn: 'focus',
                                showAnim: 'show',
                                showOptions: {},
                                defaultDate: null,
                                appendText: '',
                                buttonText: '...',
                                buttonImage: '',
                                buttonImageOnly: false,
                                closeAtTop: true,
                                mandatory: false,
                                hideIfNoPrevNext: false,
                                navigationAsDateFormat: false,
                                gotoCurrent: false,
                                changeMonth: true,
                                changeYear: true,
                                yearRange: '-10:+10',
                                changeFirstDay: true,
                                highlightWeek: false,
                                showOtherMonths: false,
                                showWeeks: false,
                                calculateWeek: this.iso8601Week,
                                shortYearCutoff: '+10',
                                showStatus: false,
                                statusForDate: this.dateStatus,
                                minDate: null,
                                maxDate: null,
                                duration: 'normal',
                                beforeShowDay: null,
                                beforeShow: null,
                                onSelect: null,
                                onChangeMonthYear: null,
                                onClose: null,
                                numberOfMonths: 1,
                                stepMonths: 1,
                                rangeSelect: false,
                                rangeSeparator: ' - ',
                                altField: '',
                                altFormat: ''
                        };
                        $.extend(this._defaults, this.regional['']);
                        this.dpDiv = $('<div id="' + this._mainDivId + '" style="display: none;"></div>');
                }
                $.extend(Datepicker.prototype, {
                        markerClassName: 'hasDatepicker',
                        log: function() {
                                if (this.debug) console.log.apply('', arguments);
                        },
                        setDefaults: function(settings) {
                                extendRemove(this._defaults, settings || {});
                                return this;
                        },
                        _attachDatepicker: function(target, settings) {
                                var inlineSettings = null;
                                for (attrName in this._defaults) {
                                        var attrValue = target.getAttribute('date:' + attrName);
                                        if (attrValue) {
                                                inlineSettings = inlineSettings || {};
                                                try {
                                                        inlineSettings[attrName] = eval(attrValue);
                                                } catch(err) {
                                                        inlineSettings[attrName] = attrValue;
                                                }
                                        }
                                }
                                var nodeName = target.nodeName.toLowerCase();
                                var inline = (nodeName == 'div' || nodeName == 'span');
                                if (!target.id) target.id = 'dp' + new Date().getTime();
                                var inst = this._newInst($(target), inline);
                                inst.settings = $.extend({},
                                settings || {},
                                inlineSettings || {});
                                if (nodeName == 'input') {
                                        this._connectDatepicker(target, inst);
                                } else if (inline) {
                                        this._inlineDatepicker(target, inst);
                                }
                        },
                        _newInst: function(target, inline) {
                                return {
                                        id: target[0].id,
                                        input: target,
                                        selectedDay: 0,
                                        selectedMonth: 0,
                                        selectedYear: 0,
                                        drawMonth: 0,
                                        drawYear: 0,
                                        inline: inline,
                                        dpDiv: (!inline ? this.dpDiv : $('<div class="ui-datepicker-inline"></div>'))
                                };
                        },
                        _connectDatepicker: function(target, inst) {
                                var input = $(target);
                                if (input.hasClass(this.markerClassName)) return;
                                var appendText = this._get(inst, 'appendText');
                                var isRTL = this._get(inst, 'isRTL');
                                if (appendText) input[isRTL ? 'before' : 'after']('<span class="' + this._appendClass + '">' + appendText + '</span>');
                                var showOn = this._get(inst, 'showOn');
                                if (showOn == 'focus' || showOn == 'both') input.focus(this._showDatepicker);
                                if (showOn == 'button' || showOn == 'both') {
                                        var buttonText = this._get(inst, 'buttonText');
                                        var buttonImage = this._get(inst, 'buttonImage');
                                        var trigger = $(this._get(inst, 'buttonImageOnly') ? $('<img/>').addClass(this._triggerClass).attr({
                                                src: buttonImage,
                                                alt: buttonText,
                                                title: buttonText
                                        }) : $('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage == '' ? buttonText : $('<img/>').attr({
                                                src: buttonImage,
                                                alt: buttonText,
                                                title: buttonText
                                        })));
                                        input[isRTL ? 'before' : 'after'](trigger);
                                        trigger.click(function() {
                                                if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target) $.datepicker._hideDatepicker();
                                                else $.datepicker._showDatepicker(target);
                                                return false;
                                        });
                                }
                                input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker", function(event, key, value) {
                                        inst.settings[key] = value;
                                }).bind("getData.datepicker", function(event, key) {
                                        return this._get(inst, key);
                                });
                                $.data(target, PROP_NAME, inst);
                        },
                        _inlineDatepicker: function(target, inst) {
                                var input = $(target);
                                if (input.hasClass(this.markerClassName)) return;
                                input.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker", function(event, key, value) {
                                        inst.settings[key] = value;
                                }).bind("getData.datepicker", function(event, key) {
                                        return this._get(inst, key);
                                });
                                $.data(target, PROP_NAME, inst);
                                this._setDate(inst, this._getDefaultDate(inst));
                                this._updateDatepicker(inst);
                        },
                        _dialogDatepicker: function(input, dateText, onSelect, settings, pos) {
                                var inst = this._dialogInst;
                                if (!inst) {
                                        var id = 'dp' + new Date().getTime();
                                        this._dialogInput = $('<input type="text" id="' + id + '" size="1" style="position: absolute; top: -100px;"/>');
                                        this._dialogInput.keydown(this._doKeyDown);
                                        $('body').append(this._dialogInput);
                                        inst = this._dialogInst = this._newInst(this._dialogInput, false);
                                        inst.settings = {};
                                        $.data(this._dialogInput[0], PROP_NAME, inst);
                                }
                                extendRemove(inst.settings, settings || {});
                                this._dialogInput.val(dateText);
                                this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
                                if (!this._pos) {
                                        var browserWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
                                        var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
                                        var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
                                        var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
                                        this._pos = [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
                                }
                                this._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px');
                                inst.settings.onSelect = onSelect;
                                this._inDialog = true;
                                this.dpDiv.addClass(this._dialogClass);
                                this._showDatepicker(this._dialogInput[0]);
                                if ($.blockUI) $.blockUI(this.dpDiv);
                                $.data(this._dialogInput[0], PROP_NAME, inst);
                                return this;
                        },
                        _destroyDatepicker: function(target) {
                                var nodeName = target.nodeName.toLowerCase();
                                var $target = $(target);
                                $.removeData(target, PROP_NAME);
                                if (nodeName == 'input') {
                                        $target.siblings('.' + this._appendClass).remove().end().siblings('.' + this._triggerClass).remove().end().removeClass(this.markerClassName).unbind('focus', this._showDatepicker).unbind('keydown', this._doKeyDown).unbind('keypress', this._doKeyPress);
                                } else if (nodeName == 'div' || nodeName == 'span') $target.removeClass(this.markerClassName).empty();
                        },
                        _enableDatepicker: function(target) {
                                target.disabled = false;
                                $(target).siblings('button.' + this._triggerClass).each(function() {
                                        this.disabled = false;
                                }).end().siblings('img.' + this._triggerClass).css({
                                        opacity: '1.0',
                                        cursor: ''
                                });
                                this._disabledInputs = $.map(this._disabledInputs, function(value) {
                                        return (value == target ? null : value);
                                });
                        },
                        _disableDatepicker: function(target) {
                                target.disabled = true;
                                $(target).siblings('button.' + this._triggerClass).each(function() {
                                        this.disabled = true;
                                }).end().siblings('img.' + this._triggerClass).css({
                                        opacity: '0.5',
                                        cursor: 'default'
                                });
                                this._disabledInputs = $.map(this._disabledInputs, function(value) {
                                        return (value == target ? null : value);
                                });
                                this._disabledInputs[this._disabledInputs.length] = target;
                        },
                        _isDisabledDatepicker: function(target) {
                                if (!target) return false;
                                for (var i = 0; i < this._disabledInputs.length; i++) {
                                        if (this._disabledInputs[i] == target) return true;
                                }
                                return false;
                        },
                        _changeDatepicker: function(target, name, value) {
                                var settings = name || {};
                                if (typeof name == 'string') {
                                        settings = {};
                                        settings[name] = value;
                                }
                                if (inst = $.data(target, PROP_NAME)) {
                                        extendRemove(inst.settings, settings);
                                        this._updateDatepicker(inst);
                                }
                        },
                        _setDateDatepicker: function(target, date, endDate) {
                                var inst = $.data(target, PROP_NAME);
                                if (inst) {
                                        this._setDate(inst, date, endDate);
                                        this._updateDatepicker(inst);
                                }
                        },
                        _getDateDatepicker: function(target) {
                                var inst = $.data(target, PROP_NAME);
                                if (inst) this._setDateFromField(inst);
                                return (inst ? this._getDate(inst) : null);
                        },
                        _doKeyDown: function(e) {
                                var inst = $.data(e.target, PROP_NAME);
                                var handled = true;
                                if ($.datepicker._datepickerShowing) switch (e.keyCode) {
                                case 9:
                                        $.datepicker._hideDatepicker(null, '');
                                        break;
                                case 13:
                                        $.datepicker._selectDay(e.target, inst.selectedMonth, inst.selectedYear, $('td.ui-datepicker-days-cell-over', inst.dpDiv)[0]);
                                        return false;
                                        break;
                                case 27:
                                        $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration'));
                                        break;
                                case 33:
                                        $.datepicker._adjustDate(e.target, (e.ctrlKey ? -1 : -$.datepicker._get(inst, 'stepMonths')), (e.ctrlKey ? 'Y' : 'M'));
                                        break;
                                case 34:
                                        $.datepicker._adjustDate(e.target, (e.ctrlKey ? +1 : +$.datepicker._get(inst, 'stepMonths')), (e.ctrlKey ? 'Y' : 'M'));
                                        break;
                                case 35:
                                        if (e.ctrlKey) $.datepicker._clearDate(e.target);
                                        break;
                                case 36:
                                        if (e.ctrlKey) $.datepicker._gotoToday(e.target);
                                        break;
                                case 37:
                                        if (e.ctrlKey) $.datepicker._adjustDate(e.target, -1, 'D');
                                        break;
                                case 38:
                                        if (e.ctrlKey) $.datepicker._adjustDate(e.target, -7, 'D');
                                        break;
                                case 39:
                                        if (e.ctrlKey) $.datepicker._adjustDate(e.target, +1, 'D');
                                        break;
                                case 40:
                                        if (e.ctrlKey) $.datepicker._adjustDate(e.target, +7, 'D');
                                        break;
                                default:
                                        handled = false;
                                } else if (e.keyCode == 36 && e.ctrlKey) $.datepicker._showDatepicker(this);
                                else handled = false;
                                if (handled) {
                                        e.preventDefault();
                                        e.stopPropagation();
                                }
                        },
                        _doKeyPress: function(e) {
                                var inst = $.data(e.target, PROP_NAME);
                                var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
                                var chr = String.fromCharCode(e.charCode == undefined ? e.keyCode : e.charCode);
                                return e.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
                        },
                        _showDatepicker: function(input) {
                                input = input.target || input;
                                if (input.nodeName.toLowerCase() != 'input') input = $('input', input.parentNode)[0];
                                if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) return;
                                var inst = $.data(input, PROP_NAME);
                                var beforeShow = $.datepicker._get(inst, 'beforeShow');
                                extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
                                $.datepicker._hideDatepicker(null, '');
                                $.datepicker._lastInput = input;
                                $.datepicker._setDateFromField(inst);
                                if ($.datepicker._inDialog) input.value = '';
                                if (!$.datepicker._pos) {
                                        $.datepicker._pos = $.datepicker._findPos(input);
                                        $.datepicker._pos[1] += input.offsetHeight;
                                }
                                var isFixed = false;
                                $(input).parents().each(function() {
                                        isFixed |= $(this).css('position') == 'fixed';
                                        return !isFixed;
                                });
                                if (isFixed && $.browser.opera) {
                                        $.datepicker._pos[0] -= document.documentElement.scrollLeft;
                                        $.datepicker._pos[1] -= document.documentElement.scrollTop;
                                }
                                var offset = {
                                        left: $.datepicker._pos[0],
                                        top: $.datepicker._pos[1]
                                };
                                $.datepicker._pos = null;
                                inst.rangeStart = null;
                                inst.dpDiv.css({
                                        position: 'absolute',
                                        display: 'block',
                                        top: '-1000px'
                                });
                                $.datepicker._updateDatepicker(inst);
                                inst.dpDiv.width($.datepicker._getNumberOfMonths(inst)[1] * $('.ui-datepicker', inst.dpDiv[0])[0].offsetWidth);
                                offset = $.datepicker._checkOffset(inst, offset, isFixed);
                                inst.dpDiv.css({
                                        position: ($.datepicker._inDialog && $.blockUI ? 'static' : (isFixed ? 'fixed' : 'absolute')),
                                        display: 'none',
                                        left: offset.left + 'px',
                                        top: offset.top + 'px'
                                });
                                if (!inst.inline) {
                                        var showAnim = $.datepicker._get(inst, 'showAnim') || 'show';
                                        var duration = $.datepicker._get(inst, 'duration');
                                        var postProcess = function() {
                                                $.datepicker._datepickerShowing = true;
                                                if ($.browser.msie && parseInt($.browser.version) < 7) $('iframe.ui-datepicker-cover').css({
                                                        width: inst.dpDiv.width() + 4,
                                                        height: inst.dpDiv.height() + 4
                                                });
                                        };
                                        if ($.effects && $.effects[showAnim]) inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
                                        else inst.dpDiv[showAnim](duration, postProcess);
                                        if (duration == '') postProcess();
                                        if (inst.input[0].type != 'hidden') inst.input[0].focus();
                                        $.datepicker._curInst = inst;
                                }
                        },
                        _updateDatepicker: function(inst) {
                                var dims = {
                                        width: inst.dpDiv.width() + 4,
                                        height: inst.dpDiv.height() + 4
                                };
                                inst.dpDiv.empty().append(this._generateDatepicker(inst)).find('iframe.ui-datepicker-cover').css({
                                        width: dims.width,
                                        height: dims.height
                                });
                                var numMonths = this._getNumberOfMonths(inst);
                                inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + 'Class']('ui-datepicker-multi');
                                inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('ui-datepicker-rtl');
                                if (inst.input && inst.input[0].type != 'hidden') $(inst.input[0]).focus();
                        },
                        _checkOffset: function(inst, offset, isFixed) {
                                var pos = inst.input ? this._findPos(inst.input[0]) : null;
                                var browserWidth = window.innerWidth || document.documentElement.clientWidth;
                                var browserHeight = window.innerHeight || document.documentElement.clientHeight;
                                var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
                                var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
                                if (this._get(inst, 'isRTL') || (offset.left + inst.dpDiv.width() - scrollX) > browserWidth) offset.left = Math.max((isFixed ? 0 : scrollX), pos[0] + (inst.input ? inst.input.width() : 0) - (isFixed ? scrollX : 0) - inst.dpDiv.width() - (isFixed && $.browser.opera ? document.documentElement.scrollLeft : 0));
                                else offset.left -= (isFixed ? scrollX : 0);
                                if ((offset.top + inst.dpDiv.height() - scrollY) > browserHeight) offset.top = Math.max((isFixed ? 0 : scrollY), pos[1] - (isFixed ? scrollY : 0) - (this._inDialog ? 0 : inst.dpDiv.height()) - (isFixed && $.browser.opera ? document.documentElement.scrollTop : 0));
                                else offset.top -= (isFixed ? scrollY : 0);
                                return offset;
                        },
                        _findPos: function(obj) {
                                while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) {
                                        obj = obj.nextSibling;
                                }
                                var position = $(obj).offset();
                                return [position.left, position.top];
                        },
                        _hideDatepicker: function(input, duration) {
                                var inst = this._curInst;
                                if (!inst) return;
                                var rangeSelect = this._get(inst, 'rangeSelect');
                                if (rangeSelect && this._stayOpen) this._selectDate('#' + inst.id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear));
                                this._stayOpen = false;
                                if (this._datepickerShowing) {
                                        duration = (duration != null ? duration : this._get(inst, 'duration'));
                                        var showAnim = this._get(inst, 'showAnim');
                                        var postProcess = function() {
                                                $.datepicker._tidyDialog(inst);
                                        };
                                        if (duration != '' && $.effects && $.effects[showAnim]) inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
                                        else inst.dpDiv[(duration == '' ? 'hide' : (showAnim == 'slideDown' ? 'slideUp' : (showAnim == 'fadeIn' ? 'fadeOut' : 'hide')))](duration, postProcess);
                                        if (duration == '') this._tidyDialog(inst);
                                        var onClose = this._get(inst, 'onClose');
                                        if (onClose) onClose.apply((inst.input ? inst.input[0] : null), [this._getDate(inst), inst]);
                                        this._datepickerShowing = false;
                                        this._lastInput = null;
                                        inst.settings.prompt = null;
                                        if (this._inDialog) {
                                                this._dialogInput.css({
                                                        position: 'absolute',
                                                        left: '0',
                                                        top: '-100px'
                                                });
                                                if ($.blockUI) {
                                                        $.unblockUI();
                                                        $('body').append(this.dpDiv);
                                                }
                                        }
                                        this._inDialog = false;
                                }
                                this._curInst = null;
                        },
                        _tidyDialog: function(inst) {
                                inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker');
                                $('.' + this._promptClass, inst.dpDiv).remove();
                        },
                        _checkExternalClick: function(event) {
                                if (!$.datepicker._curInst) return;
                                var $target = $(event.target);
                                if (($target.parents('#' + $.datepicker._mainDivId).length == 0) && !$target.hasClass($.datepicker.markerClassName) && !$target.hasClass($.datepicker._triggerClass) && $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) $.datepicker._hideDatepicker(null, '');
                        },
                        _adjustDate: function(id, offset, period) {
                                var target = $(id);
                                var inst = $.data(target[0], PROP_NAME);
                                this._adjustInstDate(inst, offset, period);
                                this._updateDatepicker(inst);
                        },
                        _gotoToday: function(id) {
                                var target = $(id);
                                var inst = $.data(target[0], PROP_NAME);
                                if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
                                        inst.selectedDay = inst.currentDay;
                                        inst.drawMonth = inst.selectedMonth = inst.currentMonth;
                                        inst.drawYear = inst.selectedYear = inst.currentYear;
                                } else {
                                        var date = new Date();
                                        inst.selectedDay = date.getDate();
                                        inst.drawMonth = inst.selectedMonth = date.getMonth();
                                        inst.drawYear = inst.selectedYear = date.getFullYear();
                                }
                                this._adjustDate(target);
                                this._notifyChange(inst);
                        },
                        _selectMonthYear: function(id, select, period) {
                                var target = $(id);
                                var inst = $.data(target[0], PROP_NAME);
                                inst._selectingMonthYear = false;
                                inst[period == 'M' ? 'drawMonth' : 'drawYear'] = select.options[select.selectedIndex].value - 0;
                                this._adjustDate(target);
                                this._notifyChange(inst);
                        },
                        _clickMonthYear: function(id) {
                                var target = $(id);
                                var inst = $.data(target[0], PROP_NAME);
                                if (inst.input && inst._selectingMonthYear && !$.browser.msie) inst.input[0].focus();
                                inst._selectingMonthYear = !inst._selectingMonthYear;
                        },
                        _changeFirstDay: function(id, day) {
                                var target = $(id);
                                var inst = $.data(target[0], PROP_NAME);
                                inst.settings.firstDay = day;
                                this._updateDatepicker(inst);
                        },
                        _selectDay: function(id, month, year, td) {
                                if ($(td).hasClass(this._unselectableClass)) return;
                                var target = $(id);
                                var inst = $.data(target[0], PROP_NAME);
                                var rangeSelect = this._get(inst, 'rangeSelect');
                                if (rangeSelect) {
                                        this._stayOpen = !this._stayOpen;
                                        if (this._stayOpen) {
                                                $('.ui-datepicker td').removeClass(this._currentClass);
                                                $(td).addClass(this._currentClass);
                                        }
                                }
                                inst.selectedDay = inst.currentDay = $('a', td).html();
                                inst.selectedMonth = inst.currentMonth = month;
                                inst.selectedYear = inst.currentYear = year;
                                if (this._stayOpen) {
                                        inst.endDay = inst.endMonth = inst.endYear = null;
                                } else if (rangeSelect) {
                                        inst.endDay = inst.currentDay;
                                        inst.endMonth = inst.currentMonth;
                                        inst.endYear = inst.currentYear;
                                }
                                this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear));
                                if (this._stayOpen) {
                                        inst.rangeStart = this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
                                        this._updateDatepicker(inst);
                                } else if (rangeSelect) {
                                        inst.selectedDay = inst.currentDay = inst.rangeStart.getDate();
                                        inst.selectedMonth = inst.currentMonth = inst.rangeStart.getMonth();
                                        inst.selectedYear = inst.currentYear = inst.rangeStart.getFullYear();
                                        inst.rangeStart = null;
                                        if (inst.inline) this._updateDatepicker(inst);
                                }
                        },
                        _clearDate: function(id) {
                                var target = $(id);
                                var inst = $.data(target[0], PROP_NAME);
                                if (this._get(inst, 'mandatory')) return;
                                this._stayOpen = false;
                                inst.endDay = inst.endMonth = inst.endYear = inst.rangeStart = null;
                                this._selectDate(target, '');
                        },
                        _selectDate: function(id, dateStr) {
                                var target = $(id);
                                var inst = $.data(target[0], PROP_NAME);
                                dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
                                if (this._get(inst, 'rangeSelect') && dateStr) dateStr = (inst.rangeStart ? this._formatDate(inst, inst.rangeStart) : dateStr) + this._get(inst, 'rangeSeparator') + dateStr;
                                if (inst.input) inst.input.val(dateStr);
                                this._updateAlternate(inst);
                                var onSelect = this._get(inst, 'onSelect');
                                if (onSelect) onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
                                else if (inst.input) inst.input.trigger('change');
                                if (inst.inline) this._updateDatepicker(inst);
                                else if (!this._stayOpen) {
                                        this._hideDatepicker(null, this._get(inst, 'duration'));
                                        this._lastInput = inst.input[0];
                                        if (typeof(inst.input[0]) != 'object') inst.input[0].focus();
                                        this._lastInput = null;
                                }
                        },
                        _updateAlternate: function(inst) {
                                var altField = this._get(inst, 'altField');
                                if (altField) {
                                        var altFormat = this._get(inst, 'altFormat');
                                        var date = this._getDate(inst);
                                        dateStr = (isArray(date) ? (!date[0] && !date[1] ? '' : this.formatDate(altFormat, date[0], this._getFormatConfig(inst)) + this._get(inst, 'rangeSeparator') + this.formatDate(altFormat, date[1] || date[0], this._getFormatConfig(inst))) : this.formatDate(altFormat, date, this._getFormatConfig(inst)));
                                        $(altField).each(function() {
                                                $(this).val(dateStr);
                                        });
                                }
                        },
                        noWeekends: function(date) {
                                var day = date.getDay();
                                return [(day > 0 && day < 6), ''];
                        },
                        iso8601Week: function(date) {
                                var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
                                var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4);
                                var firstDay = firstMon.getDay() || 7;
                                firstMon.setDate(firstMon.getDate() + 1 - firstDay);
                                if (firstDay < 4 && checkDate < firstMon) {
                                        checkDate.setDate(checkDate.getDate() - 3);
                                        return $.datepicker.iso8601Week(checkDate);
                                } else if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) {
                                        firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7;
                                        if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) {
                                                checkDate.setDate(checkDate.getDate() + 3);
                                                return $.datepicker.iso8601Week(checkDate);
                                        }
                                }
                                return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1;
                        },
                        dateStatus: function(date, inst) {
                                return $.datepicker.formatDate($.datepicker._get(inst, 'dateStatus'), date, $.datepicker._getFormatConfig(inst));
                        },
                        parseDate: function(format, value, settings) {
                                if (format == null || value == null) throw 'Invalid arguments';
                                value = (typeof value == 'object' ? value.toString() : value + '');
                                if (value == '') return null;
                                var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
                                var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
                                var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
                                var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
                                var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
                                var year = -1;
                                var month = -1;
                                var day = -1;
                                var literal = false;
                                var lookAhead = function(match) {
                                        var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
                                        if (matches) iFormat++;
                                        return matches;
                                };
                                var getNumber = function(match) {
                                        lookAhead(match);
                                        var origSize = (match == '@' ? 14 : (match == 'y' ? 4 : 2));
                                        var size = origSize;
                                        var num = 0;
                                        while (size > 0 && iValue < value.length && value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') {
                                                num = num * 10 + (value.charAt(iValue++) - 0);
                                                size--;
                                        }
                                        if (size == origSize) throw 'Missing number at position ' + iValue;
                                        return num;
                                };
                                var getName = function(match, shortNames, longNames) {
                                        var names = (lookAhead(match) ? longNames : shortNames);
                                        var size = 0;
                                        for (var j = 0; j < names.length; j++)
                                        size = Math.max(size, names[j].length);
                                        var name = '';
                                        var iInit = iValue;
                                        while (size > 0 && iValue < value.length) {
                                                name += value.charAt(iValue++);
                                                for (var i = 0; i < names.length; i++)
                                                if (name == names[i]) return i + 1;
                                                size--;
                                        }
                                        throw 'Unknown name at position ' + iInit;
                                };
                                var checkLiteral = function() {
                                        if (value.charAt(iValue) != format.charAt(iFormat)) throw 'Unexpected literal at position ' + iValue;
                                        iValue++;
                                };
                                var iValue = 0;
                                for (var iFormat = 0; iFormat < format.length; iFormat++) {
                                        if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false;
                                        else checkLiteral();
                                        else switch (format.charAt(iFormat)) {
                                        case 'd':
                                                day = getNumber('d');
                                                break;
                                        case 'D':
                                                getName('D', dayNamesShort, dayNames);
                                                break;
                                        case 'm':
                                                month = getNumber('m');
                                                break;
                                        case 'M':
                                                month = getName('M', monthNamesShort, monthNames);
                                                break;
                                        case 'y':
                                                year = getNumber('y');
                                                break;
                                        case '@':
                                                var date = new Date(getNumber('@'));
                                                year = date.getFullYear();
                                                month = date.getMonth() + 1;
                                                day = date.getDate();
                                                break;
                                        case "'":
                                                if (lookAhead("'")) checkLiteral();
                                                else literal = true;
                                                break;
                                        default:
                                                checkLiteral();
                                        }
                                }
                                if (year < 100) year += new Date().getFullYear() - new Date().getFullYear() % 100 + (year <= shortYearCutoff ? 0 : -100);
                                var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
                                if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) throw 'Invalid date';
                                return date;
                        },
                        ATOM: 'yy-mm-dd',
                        COOKIE: 'D, dd M yy',
                        ISO_8601: 'yy-mm-dd',
                        RFC_822: 'D, d M y',
                        RFC_850: 'DD, dd-M-y',
                        RFC_1036: 'D, d M y',
                        RFC_1123: 'D, d M yy',
                        RFC_2822: 'D, d M yy',
                        RSS: 'D, d M y',
                        TIMESTAMP: '@',
                        W3C: 'yy-mm-dd',
                        formatDate: function(format, date, settings) {
                                if (!date) return '';
                                var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
                                var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
                                var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
                                var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
                                var lookAhead = function(match) {
                                        var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
                                        if (matches) iFormat++;
                                        return matches;
                                };
                                var formatNumber = function(match, value) {
                                        return (lookAhead(match) && value < 10 ? '0' : '') + value;
                                };
                                var formatName = function(match, value, shortNames, longNames) {
                                        return (lookAhead(match) ? longNames[value] : shortNames[value]);
                                };
                                var output = '';
                                var literal = false;
                                if (date) for (var iFormat = 0; iFormat < format.length; iFormat++) {
                                        if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false;
                                        else output += format.charAt(iFormat);
                                        else switch (format.charAt(iFormat)) {
                                        case 'd':
                                                output += formatNumber('d', date.getDate());
                                                break;
                                        case 'D':
                                                output += formatName('D', date.getDay(), dayNamesShort, dayNames);
                                                break;
                                        case 'm':
                                                output += formatNumber('m', date.getMonth() + 1);
                                                break;
                                        case 'M':
                                                output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
                                                break;
                                        case 'y':
                                                output += (lookAhead('y') ? date.getFullYear() : (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
                                                break;
                                        case '@':
                                                output += date.getTime();
                                                break;
                                        case "'":
                                                if (lookAhead("'")) output += "'";
                                                else literal = true;
                                                break;
                                        default:
                                                output += format.charAt(iFormat);
                                        }
                                }
                                return output;
                        },
                        _possibleChars: function(format) {
                                var chars = '';
                                var literal = false;
                                for (var iFormat = 0; iFormat < format.length; iFormat++)
                                if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false;
                                else chars += format.charAt(iFormat);
                                else switch (format.charAt(iFormat)) {
                                case 'd':
                                case 'm':
                                case 'y':
                                case '@':
                                        chars += '0123456789';
                                        break;
                                case 'D':
                                case 'M':
                                        return null;
                                case "'":
                                        if (lookAhead("'")) chars += "'";
                                        else literal = true;
                                        break;
                                default:
                                        chars += format.charAt(iFormat);
                                }
                                return chars;
                        },
                        _get: function(inst, name) {
                                return inst.settings[name] !== undefined ? inst.settings[name] : this._defaults[name];
                        },
                        _setDateFromField: function(inst) {
                                var dateFormat = this._get(inst, 'dateFormat');
                                var dates = inst.input ? inst.input.val().split(this._get(inst, 'rangeSeparator')) : null;
                                inst.endDay = inst.endMonth = inst.endYear = null;
                                var date = defaultDate = this._getDefaultDate(inst);
                                if (dates.length > 0) {
                                        var settings = this._getFormatConfig(inst);
                                        if (dates.length > 1) {
                                                date = this.parseDate(dateFormat, dates[1], settings) || defaultDate;
                                                inst.endDay = date.getDate();
                                                inst.endMonth = date.getMonth();
                                                inst.endYear = date.getFullYear();
                                        }
                                        try {
                                                date = this.parseDate(dateFormat, dates[0], settings) || defaultDate;
                                        } catch(e) {
                                                this.log(e);
                                                date = defaultDate;
                                        }
                                }
                                inst.selectedDay = date.getDate();
                                inst.drawMonth = inst.selectedMonth = date.getMonth();
                                inst.drawYear = inst.selectedYear = date.getFullYear();
                                inst.currentDay = (dates[0] ? date.getDate() : 0);
                                inst.currentMonth = (dates[0] ? date.getMonth() : 0);
                                inst.currentYear = (dates[0] ? date.getFullYear() : 0);
                                this._adjustInstDate(inst);
                        },
                        _getDefaultDate: function(inst) {
                                var date = this._determineDate(this._get(inst, 'defaultDate'), new Date());
                                var minDate = this._getMinMaxDate(inst, 'min', true);
                                var maxDate = this._getMinMaxDate(inst, 'max');
                                date = (minDate && date < minDate ? minDate : date);
                                date = (maxDate && date > maxDate ? maxDate : date);
                                return date;
                        },
                        _determineDate: function(date, defaultDate) {
                                var offsetNumeric = function(offset) {
                                        var date = new Date();
                                        date.setDate(date.getDate() + offset);
                                        return date;
                                };
                                var offsetString = function(offset, getDaysInMonth) {
                                        var date = new Date();
                                        var year = date.getFullYear();
                                        var month = date.getMonth();
                                        var day = date.getDate();
                                        var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
                                        var matches = pattern.exec(offset);
                                        while (matches) {
                                                switch (matches[2] || 'd') {
                                                case 'd':
                                                case 'D':
                                                        day += (matches[1] - 0);
                                                        break;
                                                case 'w':
                                                case 'W':
                                                        day += (matches[1] * 7);
                                                        break;
                                                case 'm':
                                                case 'M':
                                                        month += (matches[1] - 0);
                                                        day = Math.min(day, getDaysInMonth(year, month));
                                                        break;
                                                case 'y':
                                                case 'Y':
                                                        year += (matches[1] - 0);
                                                        day = Math.min(day, getDaysInMonth(year, month));
                                                        break;
                                                }
                                                matches = pattern.exec(offset);
                                        }
                                        return new Date(year, month, day);
                                };
                                date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date, this._getDaysInMonth) : (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
                                date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
                                if (date) {
                                        date.setHours(0);
                                        date.setMinutes(0);
                                        date.setSeconds(0);
                                        date.setMilliseconds(0);
                                }
                                return this._daylightSavingAdjust(date);
                        },
                        _daylightSavingAdjust: function(date) {
                                if (!date) return null;
                                date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
                                return date;
                        },
                        _setDate: function(inst, date, endDate) {
                                var clear = !(date);
                                date = this._determineDate(date, new Date());
                                inst.selectedDay = inst.currentDay = date.getDate();
                                inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth();
                                inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear();
                                if (this._get(inst, 'rangeSelect')) {
                                        if (endDate) {
                                                endDate = this._determineDate(endDate, null);
                                                inst.endDay = endDate.getDate();
                                                inst.endMonth = endDate.getMonth();
                                                inst.endYear = endDate.getFullYear();
                                        } else {
                                                inst.endDay = inst.currentDay;
                                                inst.endMonth = inst.currentMonth;
                                                inst.endYear = inst.currentYear;
                                        }
                                }
                                this._adjustInstDate(inst);
                                if (inst.input) inst.input.val(clear ? '' : this._formatDate(inst) + (!this._get(inst, 'rangeSelect') ? '' : this._get(inst, 'rangeSeparator') + this._formatDate(inst, inst.endDay, inst.endMonth, inst.endYear)));
                        },
                        _getDate: function(inst) {
                                var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
                                if (this._get(inst, 'rangeSelect')) {
                                        return [inst.rangeStart || startDate, (!inst.endYear ? inst.rangeStart || startDate : this._daylightSavingAdjust(new Date(inst.endYear, inst.endMonth, inst.endDay)))];
                                } else return startDate;
                        },
                        _generateDatepicker: function(inst) {
                                var today = new Date();
                                today = this._daylightSavingAdjust(new Date(today.getFullYear(), today.getMonth(), today.getDate()));
                                var showStatus = this._get(inst, 'showStatus');
                                var isRTL = this._get(inst, 'isRTL');
                                var clear = (this._get(inst, 'mandatory') ? '' : '<div class="ui-datepicker-clear"><a onclick="jQuery.datepicker._clearDate(\'#' + inst.id + '\');"' + (showStatus ? this._addStatus(inst, this._get(inst, 'clearStatus') || '&#xa0;') : '') + '>' + this._get(inst, 'clearText') + '</a></div>');
                                var controls = '<div class="ui-datepicker-control">' + (isRTL ? '' : clear) + '<div class="ui-datepicker-close"><a onclick="jQuery.datepicker._hideDatepicker();"' + (showStatus ? this._addStatus(inst, this._get(inst, 'closeStatus') || '&#xa0;') : '') + '>' + this._get(inst, 'closeText') + '</a></div>' + (isRTL ? clear : '') + '</div>';
                                var prompt = this._get(inst, 'prompt');
                                var closeAtTop = this._get(inst, 'closeAtTop');
                                var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
                                var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
                                var numMonths = this._getNumberOfMonths(inst);
                                var stepMonths = this._get(inst, 'stepMonths');
                                var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
                                var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
                                var minDate = this._getMinMaxDate(inst, 'min', true);
                                var maxDate = this._getMinMaxDate(inst, 'max');
                                var drawMonth = inst.drawMonth;
                                var drawYear = inst.drawYear;
                                if (maxDate) {
                                        var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate()));
                                        maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
                                        while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
                                                drawMonth--;
                                                if (drawMonth < 0) {
                                                        drawMonth = 11;
                                                        drawYear--;
                                                }
                                        }
                                }
                                var prevText = this._get(inst, 'prevText');
                                prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst)));
                                var prev = '<div class="ui-datepicker-prev">' + (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? '<a onclick="jQuery.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' + (showStatus ? this._addStatus(inst, this._get(inst, 'prevStatus') || '&#xa0;') : '') + '>' + prevText + '</a>' : (hideIfNoPrevNext ? '' : '<label>' + prevText + '</label>')) + '</div>';
                                var nextText = this._get(inst, 'nextText');
                                nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst)));
                                var next = '<div class="ui-datepicker-next">' + (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? '<a onclick="jQuery.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' + (showStatus ? this._addStatus(inst, this._get(inst, 'nextStatus') || '&#xa0;') : '') + '>' + nextText + '</a>' : (hideIfNoPrevNext ? '' : '<label>' + nextText + '</label>')) + '</div>';
                                var currentText = this._get(inst, 'currentText');
                                currentText = (!navigationAsDateFormat ? currentText : this.formatDate(currentText, today, this._getFormatConfig(inst)));
                                var html = (prompt ? '<div class="' + this._promptClass + '">' + prompt + '</div>' : '') + (closeAtTop && !inst.inline ? controls : '') + '<div class="ui-datepicker-links">' + (isRTL ? next : prev) + (this._isInRange(inst, (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today)) ? '<div class="ui-datepicker-current">' + '<a onclick="jQuery.datepicker._gotoToday(\'#' + inst.id + '\');"' + (showStatus ? this._addStatus(inst, this._get(inst, 'currentStatus') || '&#xa0;') : '') + '>' + currentText + '</a></div>' : '') + (isRTL ? prev : next) + '</div>';
                                var firstDay = this._get(inst, 'firstDay');
                                var changeFirstDay = this._get(inst, 'changeFirstDay');
                                var dayNames = this._get(inst, 'dayNames');
                                var dayNamesShort = this._get(inst, 'dayNamesShort');
                                var dayNamesMin = this._get(inst, 'dayNamesMin');
                                var monthNames = this._get(inst, 'monthNames');
                                var beforeShowDay = this._get(inst, 'beforeShowDay');
                                var highlightWeek = this._get(inst, 'highlightWeek');
                                var showOtherMonths = this._get(inst, 'showOtherMonths');
                                var showWeeks = this._get(inst, 'showWeeks');
                                var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
                                var status = (showStatus ? this._get(inst, 'dayStatus') || '&#xa0;' : '');
                                var dateStatus = this._get(inst, 'statusForDate') || this.dateStatus;
                                var endDate = inst.endDay ? this._daylightSavingAdjust(new Date(inst.endYear, inst.endMonth, inst.endDay)) : currentDate;
                                for (var row = 0; row < numMonths[0]; row++)
                                for (var col = 0; col < numMonths[1]; col++) {
                                        var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
                                        html += '<div class="ui-datepicker-one-month' + (col == 0 ? ' ui-datepicker-new-row' : '') + '">' + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, row > 0 || col > 0, showStatus, monthNames) + '<table class="ui-datepicker" cellpadding="0" cellspacing="0"><thead>' + '<tr class="ui-datepicker-title-row">' + (showWeeks ? '<td>' + this._get(inst, 'weekHeader') + '</td>' : '');
                                        for (var dow = 0; dow < 7; dow++) {
                                                var day = (dow + firstDay) % 7;
                                                var dayStatus = (status.indexOf('DD') > -1 ? status.replace(/DD/, dayNames[day]) : status.replace(/D/, dayNamesShort[day]));
                                                html += '<td' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end-cell"' : '') + '>' + (!changeFirstDay ? '<span' : '<a onclick="jQuery.datepicker._changeFirstDay(\'#' + inst.id + '\', ' + day + ');"') + (showStatus ? this._addStatus(inst, dayStatus) : '') + ' title="' + dayNames[day] + '">' + dayNamesMin[day] + (changeFirstDay ? '</a>' : '</span>') + '</td>';
                                        }
                                        html += '</tr></thead><tbody>';
                                        var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
                                        if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
                                        var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
                                        var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7));
                                        var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
                                        for (var dRow = 0; dRow < numRows; dRow++) {
                                                html += '<tr class="ui-datepicker-days-row">' + (showWeeks ? '<td class="ui-datepicker-week-col">' + calculateWeek(printDate) + '</td>' : '');
                                                for (var dow = 0; dow < 7; dow++) {
                                                        var daySettings = (beforeShowDay ? beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
                                                        var otherMonth = (printDate.getMonth() != drawMonth);
                                                        var unselectable = otherMonth || !daySettings[0] || (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
                                                        html += '<td class="ui-datepicker-days-cell' + ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end-cell' : '') + (otherMonth ? ' ui-datepicker-otherMonth' : '') + (printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth ? ' ui-datepicker-days-cell-over' : '') + (unselectable ? ' ' + this._unselectableClass : '') + (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? ' ' + this._currentClass : '') + (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + (unselectable ? (highlightWeek ? ' onmouseover="jQuery(this).parent().addClass(\'ui-datepicker-week-over\');"' + ' onmouseout="jQuery(this).parent().removeClass(\'ui-datepicker-week-over\');"' : '') : ' onmouseover="jQuery(this).addClass(\'ui-datepicker-days-cell-over\')' + (highlightWeek ? '.parent().addClass(\'ui-datepicker-week-over\')' : '') + ';' + (!showStatus || (otherMonth && !showOtherMonths) ? '' : 'jQuery(\'#ui-datepicker-status-' + inst.id + '\').html(\'' + (dateStatus.apply((inst.input ? inst.input[0] : null), [printDate, inst]) || '&#xa0;') + '\');') + '"' + ' onmouseout="jQuery(this).removeClass(\'ui-datepicker-days-cell-over\')' + (highlightWeek ? '.parent().removeClass(\'ui-datepicker-week-over\')' : '') + ';' + (!showStatus || (otherMonth && !showOtherMonths) ? '' : 'jQuery(\'#ui-datepicker-status-' + inst.id + '\').html(\'&#xa0;\');') + '" onclick="jQuery.datepicker._selectDay(\'#' + inst.id + '\',' + drawMonth + ',' + drawYear + ', this);"') + '>' + (otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : (unselectable ? printDate.getDate() : '<a>' + printDate.getDate() + '</a>')) + '</td>';
                                                        printDate.setDate(printDate.getDate() + 1);
                                                        printDate = this._daylightSavingAdjust(printDate);
                                                }
                                                html += '</tr>';
                                        }
                                        drawMonth++;
                                        if (drawMonth > 11) {
                                                drawMonth = 0;
                                                drawYear++;
                                        }
                                        html += '</tbody></table></div>';
                                }
                                html += (showStatus ? '<div style="clear: both;"></div><div id="ui-datepicker-status-' + inst.id + '" class="ui-datepicker-status">' + (this._get(inst, 'initStatus') || '&#xa0;') + '</div>' : '') + (!closeAtTop && !inst.inline ? controls : '') + '<div style="clear: both;"></div>' + ($.browser.msie && parseInt($.browser.version) < 7 && !inst.inline ? '<iframe src="javascript:false;" class="ui-datepicker-cover"></iframe>' : '');
                                return html;
                        },
                        _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, secondary, showStatus, monthNames) {
                                minDate = (inst.rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate);
                                var html = '<div class="ui-datepicker-header">';
                                if (secondary || !this._get(inst, 'changeMonth')) html += monthNames[drawMonth] + '&#xa0;';
                                else {
                                        var inMinYear = (minDate && minDate.getFullYear() == drawYear);
                                        var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
                                        html += '<select class="ui-datepicker-new-month" ' + 'onchange="jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' + 'onclick="jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' + (showStatus ? this._addStatus(inst, this._get(inst, 'monthStatus') || '&#xa0;') : '') + '>';
                                        for (var month = 0; month < 12; month++) {
                                                if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) html += '<option value="' + month + '"' + (month == drawMonth ? ' selected="selected"' : '') + '>' + monthNames[month] + '</option>';
                                        }
                                        html += '</select>';
                                }
                                if (secondary || !this._get(inst, 'changeYear')) html += drawYear;
                                else {
                                        var years = this._get(inst, 'yearRange').split(':');
                                        var year = 0;
                                        var endYear = 0;
                                        if (years.length != 2) {
                                                year = drawYear - 10;
                                                endYear = drawYear + 10;
                                        } else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') {
                                                year = endYear = new Date().getFullYear();
                                                year += parseInt(years[0], 10);
                                                endYear += parseInt(years[1], 10);
                                        } else {
                                                year = parseInt(years[0], 10);
                                                endYear = parseInt(years[1], 10);
                                        }
                                        year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
                                        endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
                                        html += '<select class="ui-datepicker-new-year" ' + 'onchange="jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' + 'onclick="jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' + (showStatus ? this._addStatus(inst, this._get(inst, 'yearStatus') || '&#xa0;') : '') + '>';
                                        for (; year <= endYear; year++) {
                                                html += '<option value="' + year + '"' + (year == drawYear ? ' selected="selected"' : '') + '>' + year + '</option>';
                                        }
                                        html += '</select>';
                                }
                                html += '</div>';
                                return html;
                        },
                        _addStatus: function(inst, text) {
                                return ' onmouseover="jQuery(\'#ui-datepicker-status-' + inst.id + '\').html(\'' + text + '\');" ' + 'onmouseout="jQuery(\'#ui-datepicker-status-' + inst.id + '\').html(\'&#xa0;\');"';
                        },
                        _adjustInstDate: function(inst, offset, period) {
                                var year = inst.drawYear + (period == 'Y' ? offset : 0);
                                var month = inst.drawMonth + (period == 'M' ? offset : 0);
                                var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period == 'D' ? offset : 0);
                                var date = this._daylightSavingAdjust(new Date(year, month, day));
                                var minDate = this._getMinMaxDate(inst, 'min', true);
                                var maxDate = this._getMinMaxDate(inst, 'max');
                                date = (minDate && date < minDate ? minDate : date);
                                date = (maxDate && date > maxDate ? maxDate : date);
                                inst.selectedDay = date.getDate();
                                inst.drawMonth = inst.selectedMonth = date.getMonth();
                                inst.drawYear = inst.selectedYear = date.getFullYear();
                                if (period == 'M' || period == 'Y') this._notifyChange(inst);
                        },
                        _notifyChange: function(inst) {
                                var onChange = this._get(inst, 'onChangeMonthYear');
                                if (onChange) onChange.apply((inst.input ? inst.input[0] : null), [new Date(inst.selectedYear, inst.selectedMonth, 1), inst]);
                        },
                        _getNumberOfMonths: function(inst) {
                                var numMonths = this._get(inst, 'numberOfMonths');
                                return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
                        },
                        _getMinMaxDate: function(inst, minMax, checkRange) {
                                var date = this._determineDate(this._get(inst, minMax + 'Date'), null);
                                return (!checkRange || !inst.rangeStart ? date : (!date || inst.rangeStart > date ? inst.rangeStart : date));
                        },
                        _getDaysInMonth: function(year, month) {
                                return 32 - new Date(year, month, 32).getDate();
                        },
                        _getFirstDayOfMonth: function(year, month) {
                                return new Date(year, month, 1).getDay();
                        },
                        _canAdjustMonth: function(inst, offset, curYear, curMonth) {
                                var numMonths = this._getNumberOfMonths(inst);
                                var date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1));
                                if (offset < 0) date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
                                return this._isInRange(inst, date);
                        },
                        _isInRange: function(inst, date) {
                                var newMinDate = (!inst.rangeStart ? null : this._daylightSavingAdjust(new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay)));
                                newMinDate = (newMinDate && inst.rangeStart < newMinDate ? inst.rangeStart : newMinDate);
                                var minDate = newMinDate || this._getMinMaxDate(inst, 'min');
                                var maxDate = this._getMinMaxDate(inst, 'max');
                                return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate));
                        },
                        _getFormatConfig: function(inst) {
                                var shortYearCutoff = this._get(inst, 'shortYearCutoff');
                                shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
                                return {
                                        shortYearCutoff: shortYearCutoff,
                                        dayNamesShort: this._get(inst, 'dayNamesShort'),
                                        dayNames: this._get(inst, 'dayNames'),
                                        monthNamesShort: this._get(inst, 'monthNamesShort'),
                                        monthNames: this._get(inst, 'monthNames')
                                };
                        },
                        _formatDate: function(inst, day, month, year) {
                                if (!day) {
                                        inst.currentDay = inst.selectedDay;
                                        inst.currentMonth = inst.selectedMonth;
                                        inst.currentYear = inst.selectedYear;
                                }
                                var date = (day ? (typeof day == 'object' ? day : this._daylightSavingAdjust(new Date(year, month, day))) : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
                                return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
                        }
                });

                function extendRemove(target, props) {
                        $.extend(target, props);
                        for (var name in props)
                        if (props[name] == null || props[name] == undefined) target[name] = props[name];
                        return target;
                };

                function isArray(a) {
                        return (a && (($.browser.safari && typeof a == 'object' && a.length) || (a.constructor && a.constructor.toString().match(/\Array\(\)/))));
                };
                $.fn.datepicker = function(options) {
                        var otherArgs = Array.prototype.slice.call(arguments, 1);
                        if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate')) return $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this[0]].concat(otherArgs));
                        return this.each(function() {
                                typeof options == 'string' ? $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this].concat(otherArgs)) : $.datepicker._attachDatepicker(this, options);
                        });
                };
                $.datepicker = new Datepicker();
                $(document).ready(function() {
                        $(document.body).append($.datepicker.dpDiv).mousedown($.datepicker._checkExternalClick);
                });
        })(jQuery);;
        (function($) {
                $.effects = $.effects || {};
                $.extend($.effects, {
                        save: function(el, set) {
                                for (var i = 0; i < set.length; i++) {
                                        if (set[i] !== null) $.data(el[0], "ec.storage." + set[i], el[0].style[set[i]]);
                                }
                        },
                        restore: function(el, set) {
                                for (var i = 0; i < set.length; i++) {
                                        if (set[i] !== null) el.css(set[i], $.data(el[0], "ec.storage." + set[i]));
                                }
                        },
                        setMode: function(el, mode) {
                                if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide';
                                return mode;
                        },
                        getBaseline: function(origin, original) {
                                var y, x;
                                switch (origin[0]) {
                                case 'top':
                                        y = 0;
                                        break;
                                case 'middle':
                                        y = 0.5;
                                        break;
                                case 'bottom':
                                        y = 1;
                                        break;
                                default:
                                        y = origin[0] / original.height;
                                };
                                switch (origin[1]) {
                                case 'left':
                                        x = 0;
                                        break;
                                case 'center':
                                        x = 0.5;
                                        break;
                                case 'right':
                                        x = 1;
                                        break;
                                default:
                                        x = origin[1] / original.width;
                                };
                                return {
                                        x: x,
                                        y: y
                                };
                        },
                        createWrapper: function(el) {
                                if (el.parent().attr('id') == 'fxWrapper') return el;
                                var props = {
                                        width: el.outerWidth({
                                                margin: true
                                        }),
                                        height: el.outerHeight({
                                                margin: true
                                        }),
                                        'float': el.css('float')
                                };
                                el.wrap('<div id="fxWrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');
                                var wrapper = el.parent();
                                if (el.css('position') == 'static') {
                                        wrapper.css({
                                                position: 'relative'
                                        });
                                        el.css({
                                                position: 'relative'
                                        });
                                } else {
                                        var top = el.css('top');
                                        if (isNaN(parseInt(top))) top = 'auto';
                                        var left = el.css('left');
                                        if (isNaN(parseInt(left))) left = 'auto';
                                        wrapper.css({
                                                position: el.css('position'),
                                                top: top,
                                                left: left,
                                                zIndex: el.css('z-index')
                                        }).show();
                                        el.css({
                                                position: 'relative',
                                                top: 0,
                                                left: 0
                                        });
                                }
                                wrapper.css(props);
                                return wrapper;
                        },
                        removeWrapper: function(el) {
                                if (el.parent().attr('id') == 'fxWrapper') return el.parent().replaceWith(el);
                                return el;
                        },
                        setTransition: function(el, list, factor, val) {
                                val = val || {};
                                $.each(list, function(i, x) {
                                        unit = el.cssUnit(x);
                                        if (unit[0] > 0) val[x] = unit[0] * factor + unit[1];
                                });
                                return val;
                        },
                        animateClass: function(value, duration, easing, callback) {
                                var cb = (typeof easing == "function" ? easing : (callback ? callback : null));
                                var ea = (typeof easing == "object" ? easing : null);
                                return this.each(function() {
                                        var offset = {};
                                        var that = $(this);
                                        var oldStyleAttr = that.attr("style") || '';
                                        if (typeof oldStyleAttr == 'object') oldStyleAttr = oldStyleAttr["cssText"];
                                        if (value.toggle) {
                                                that.hasClass(value.toggle) ? value.remove = value.toggle : value.add = value.toggle;
                                        }
                                        var oldStyle = $.extend({},
                                        (document.defaultView ? document.defaultView.getComputedStyle(this, null) : this.currentStyle));
                                        if (value.add) that.addClass(value.add);
                                        if (value.remove) that.removeClass(value.remove);
                                        var newStyle = $.extend({},
                                        (document.defaultView ? document.defaultView.getComputedStyle(this, null) : this.currentStyle));
                                        if (value.add) that.removeClass(value.add);
                                        if (value.remove) that.addClass(value.remove);
                                        for (var n in newStyle) {
                                                if (typeof newStyle[n] != "function" && newStyle[n] && n.indexOf("Moz") == -1 && n.indexOf("length") == -1 && newStyle[n] != oldStyle[n] && (n.match(/color/i) || (!n.match(/color/i) && !isNaN(parseInt(newStyle[n], 10)))) && (oldStyle.position != "static" || (oldStyle.position == "static" && !n.match(/left|top|bottom|right/)))) offset[n] = newStyle[n];
                                        }
                                        that.animate(offset, duration, ea, function() {
                                                if (typeof $(this).attr("style") == 'object') {
                                                        $(this).attr("style")["cssText"] = "";
                                                        $(this).attr("style")["cssText"] = oldStyleAttr;
                                                } else $(this).attr("style", oldStyleAttr);
                                                if (value.add) $(this).addClass(value.add);
                                                if (value.remove) $(this).removeClass(value.remove);
                                                if (cb) cb.apply(this, arguments);
                                        });
                                });
                        }
                });
                $.fn.extend({
                        _show: $.fn.show,
                        _hide: $.fn.hide,
                        __toggle: $.fn.toggle,
                        _addClass: $.fn.addClass,
                        _removeClass: $.fn.removeClass,
                        _toggleClass: $.fn.toggleClass,
                        effect: function(fx, o, speed, callback) {
                                return $.effects[fx] ? $.effects[fx].call(this, {
                                        method: fx,
                                        options: o || {},
                                        duration: speed,
                                        callback: callback
                                }) : null;
                        },
                        show: function() {
                                if (!arguments[0] || (arguments[0].constructor == Number || /(slow|normal|fast)/.test(arguments[0]))) return this._show.apply(this, arguments);
                                else {
                                        var o = arguments[1] || {};
                                        o['mode'] = 'show';
                                        return this.effect.apply(this, [arguments[0], o, arguments[2] || o.duration, arguments[3] || o.callback]);
                                }
                        },
                        hide: function() {
                                if (!arguments[0] || (arguments[0].constructor == Number || /(slow|normal|fast)/.test(arguments[0]))) return this._hide.apply(this, arguments);
                                else {
                                        var o = arguments[1] || {};
                                        o['mode'] = 'hide';
                                        return this.effect.apply(this, [arguments[0], o, arguments[2] || o.duration, arguments[3] || o.callback]);
                                }
                        },
                        toggle: function() {
                                if (!arguments[0] || (arguments[0].constructor == Number || /(slow|normal|fast)/.test(arguments[0])) || (arguments[0].constructor == Function)) return this.__toggle.apply(this, arguments);
                                else {
                                        var o = arguments[1] || {};
                                        o['mode'] = 'toggle';
                                        return this.effect.apply(this, [arguments[0], o, arguments[2] || o.duration, arguments[3] || o.callback]);
                                }
                        },
                        addClass: function(classNames, speed, easing, callback) {
                                return speed ? $.effects.animateClass.apply(this, [{
                                        add: classNames
                                },
                                speed, easing, callback]) : this._addClass(classNames);
                        },
                        removeClass: function(classNames, speed, easing, callback) {
                                return speed ? $.effects.animateClass.apply(this, [{
                                        remove: classNames
                                },
                                speed, easing, callback]) : this._removeClass(classNames);
                        },
                        toggleClass: function(classNames, speed, easing, callback) {
                                return speed ? $.effects.animateClass.apply(this, [{
                                        toggle: classNames
                                },
                                speed, easing, callback]) : this._toggleClass(classNames);
                        },
                        morph: function(remove, add, speed, easing, callback) {
                                return $.effects.animateClass.apply(this, [{
                                        add: add,
                                        remove: remove
                                },
                                speed, easing, callback]);
                        },
                        switchClass: function() {
                                return this.morph.apply(this, arguments);
                        },
                        cssUnit: function(key) {
                                var style = this.css(key),
                                        val = [];
                                $.each(['em', 'px', '%', 'pt'], function(i, unit) {
                                        if (style.indexOf(unit) > 0) val = [parseFloat(style), unit];
                                });
                                return val;
                        }
                });
                jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i, attr) {
                        jQuery.fx.step[attr] = function(fx) {
                                if (fx.state == 0) {
                                        fx.start = getColor(fx.elem, attr);
                                        fx.end = getRGB(fx.end);
                                }
                                fx.elem.style[attr] = "rgb(" + [Math.max(Math.min(parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0]), 255), 0), Math.max(Math.min(parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), Math.max(Math.min(parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 255), 0)].join(",") + ")";
                        }
                });

                function getRGB(color) {
                        var result;
                        if (color && color.constructor == Array && color.length == 3) return color;
                        if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])];
                        if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) return [parseFloat(result[1]) * 2.55, parseFloat(result[2]) * 2.55, parseFloat(result[3]) * 2.55];
                        if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) return [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)];
                        if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) return [parseInt(result[1] + result[1], 16), parseInt(result[2] + result[2], 16), parseInt(result[3] + result[3], 16)];
                        if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) return colors['transparent']
                        return colors[jQuery.trim(color).toLowerCase()];
                }


                function getColor(elem, attr) {
                        var color;
                        do {
                                color = jQuery.curCSS(elem, attr);
                                if (color != '' && color != 'transparent' || jQuery.nodeName(elem, "body")) break;
                                attr = "backgroundColor";
                        } while (elem = elem.parentNode);
                        return getRGB(color);
                };
                var colors = {
                        aqua: [0, 255, 255],
                        azure: [240, 255, 255],
                        beige: [245, 245, 220],
                        black: [0, 0, 0],
                        blue: [0, 0, 255],
                        brown: [165, 42, 42],
                        cyan: [0, 255, 255],
                        darkblue: [0, 0, 139],
                        darkcyan: [0, 139, 139],
                        darkgrey: [169, 169, 169],
                        darkgreen: [0, 100, 0],
                        darkkhaki: [189, 183, 107],
                        darkmagenta: [139, 0, 139],
                        darkolivegreen: [85, 107, 47],
                        darkorange: [255, 140, 0],
                        darkorchid: [153, 50, 204],
                        darkred: [139, 0, 0],
                        darksalmon: [233, 150, 122],
                        darkviolet: [148, 0, 211],
                        fuchsia: [255, 0, 255],
                        gold: [255, 215, 0],
                        green: [0, 128, 0],
                        indigo: [75, 0, 130],
                        khaki: [240, 230, 140],
                        lightblue: [173, 216, 230],
                        lightcyan: [224, 255, 255],
                        lightgreen: [144, 238, 144],
                        lightgrey: [211, 211, 211],
                        lightpink: [255, 182, 193],
                        lightyellow: [255, 255, 224],
                        lime: [0, 255, 0],
                        magenta: [255, 0, 255],
                        maroon: [128, 0, 0],
                        navy: [0, 0, 128],
                        olive: [128, 128, 0],
                        orange: [255, 165, 0],
                        pink: [255, 192, 203],
                        purple: [128, 0, 128],
                        violet: [128, 0, 128],
                        red: [255, 0, 0],
                        silver: [192, 192, 192],
                        white: [255, 255, 255],
                        yellow: [255, 255, 0],
                        transparent: [255, 255, 255]
                };
                jQuery.easing['jswing'] = jQuery.easing['swing'];
                jQuery.extend(jQuery.easing, {
                        def: 'easeOutQuad',
                        swing: function(x, t, b, c, d) {
                                return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
                        },
                        easeInQuad: function(x, t, b, c, d) {
                                return c * (t /= d) * t + b;
                        },
                        easeOutQuad: function(x, t, b, c, d) {
                                return -c * (t /= d) * (t - 2) + b;
                        },
                        easeInOutQuad: function(x, t, b, c, d) {
                                if ((t /= d / 2) < 1) return c / 2 * t * t + b;
                                return -c / 2 * ((--t) * (t - 2) - 1) + b;
                        },
                        easeInCubic: function(x, t, b, c, d) {
                                return c * (t /= d) * t * t + b;
                        },
                        easeOutCubic: function(x, t, b, c, d) {
                                return c * ((t = t / d - 1) * t * t + 1) + b;
                        },
                        easeInOutCubic: function(x, t, b, c, d) {
                                if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;
                                return c / 2 * ((t -= 2) * t * t + 2) + b;
                        },
                        easeInQuart: function(x, t, b, c, d) {
                                return c * (t /= d) * t * t * t + b;
                        },
                        easeOutQuart: function(x, t, b, c, d) {
                                return -c * ((t = t / d - 1) * t * t * t - 1) + b;
                        },
                        easeInOutQuart: function(x, t, b, c, d) {
                                if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;
                                return -c / 2 * ((t -= 2) * t * t * t - 2) + b;
                        },
                        easeInQuint: function(x, t, b, c, d) {
                                return c * (t /= d) * t * t * t * t + b;
                        },
                        easeOutQuint: function(x, t, b, c, d) {
                                return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
                        },
                        easeInOutQuint: function(x, t, b, c, d) {
                                if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;
                                return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
                        },
                        easeInSine: function(x, t, b, c, d) {
                                return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;
                        },
                        easeOutSine: function(x, t, b, c, d) {
                                return c * Math.sin(t / d * (Math.PI / 2)) + b;
                        },
                        easeInOutSine: function(x, t, b, c, d) {
                                return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
                        },
                        easeInExpo: function(x, t, b, c, d) {
                                return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;
                        },
                        easeOutExpo: function(x, t, b, c, d) {
                                return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;
                        },
                        easeInOutExpo: function(x, t, b, c, d) {
                                if (t == 0) return b;
                                if (t == d) return b + c;
                                if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
                                return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;
                        },
                        easeInCirc: function(x, t, b, c, d) {
                                return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
                        },
                        easeOutCirc: function(x, t, b, c, d) {
                                return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
                        },
                        easeInOutCirc: function(x, t, b, c, d) {
                                if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;
                                return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
                        },
                        easeInElastic: function(x, t, b, c, d) {
                                var s = 1.70158;
                                var p = 0;
                                var a = c;
                                if (t == 0) return b;
                                if ((t /= d) == 1) return b + c;
                                if (!p) p = d * .3;
                                if (a < Math.abs(c)) {
                                        a = c;
                                        var s = p / 4;
                                } else var s = p / (2 * Math.PI) * Math.asin(c / a);
                                return - (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
                        },
                        easeOutElastic: function(x, t, b, c, d) {
                                var s = 1.70158;
                                var p = 0;
                                var a = c;
                                if (t == 0) return b;
                                if ((t /= d) == 1) return b + c;
                                if (!p) p = d * .3;
                                if (a < Math.abs(c)) {
                                        a = c;
                                        var s = p / 4;
                                } else var s = p / (2 * Math.PI) * Math.asin(c / a);
                                return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
                        },
                        easeInOutElastic: function(x, t, b, c, d) {
                                var s = 1.70158;
                                var p = 0;
                                var a = c;
                                if (t == 0) return b;
                                if ((t /= d / 2) == 2) return b + c;
                                if (!p) p = d * (.3 * 1.5);
                                if (a < Math.abs(c)) {
                                        a = c;
                                        var s = p / 4;
                                } else var s = p / (2 * Math.PI) * Math.asin(c / a);
                                if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
                                return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
                        },
                        easeInBack: function(x, t, b, c, d, s) {
                                if (s == undefined) s = 1.70158;
                                return c * (t /= d) * t * ((s + 1) * t - s) + b;
                        },
                        easeOutBack: function(x, t, b, c, d, s) {
                                if (s == undefined) s = 1.70158;
                                return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
                        },
                        easeInOutBack: function(x, t, b, c, d, s) {
                                if (s == undefined) s = 1.70158;
                                if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
                                return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
                        },
                        easeInBounce: function(x, t, b, c, d) {
                                return c - jQuery.easing.easeOutBounce(x, d - t, 0, c, d) + b;
                        },
                        easeOutBounce: function(x, t, b, c, d) {
                                if ((t /= d) < (1 / 2.75)) {
                                        return c * (7.5625 * t * t) + b;
                                } else if (t < (2 / 2.75)) {
                                        return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
                                } else if (t < (2.5 / 2.75)) {
                                        return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
                                } else {
                                        return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
                                }
                        },
                        easeInOutBounce: function(x, t, b, c, d) {
                                if (t < d / 2) return jQuery.easing.easeInBounce(x, t * 2, 0, c, d) * .5 + b;
                                return jQuery.easing.easeOutBounce(x, t * 2 - d, 0, c, d) * .5 + c * .5 + b;
                        }
                });
        })(jQuery);
        (function($) {
                $.effects.blind = function(o) {
                        return this.queue(function() {
                                var el = $(this),
                                        props = ['position', 'top', 'left'];
                                var mode = $.effects.setMode(el, o.options.mode || 'hide');
                                var direction = o.options.direction || 'vertical';
                                $.effects.save(el, props);
                                el.show();
                                var wrapper = $.effects.createWrapper(el).css({
                                        overflow: 'hidden'
                                });
                                var ref = (direction == 'vertical') ? 'height' : 'width';
                                var distance = (direction == 'vertical') ? wrapper.height() : wrapper.width();
                                if (mode == 'show') wrapper.css(ref, 0);
                                var animation = {};
                                animation[ref] = mode == 'show' ? distance : 0;
                                wrapper.animate(animation, o.duration, o.options.easing, function() {
                                        if (mode == 'hide') el.hide();
                                        $.effects.restore(el, props);
                                        $.effects.removeWrapper(el);
                                        if (o.callback) o.callback.apply(el[0], arguments);
                                        el.dequeue();
                                });
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.bounce = function(o) {
                        return this.queue(function() {
                                var el = $(this),
                                        props = ['position', 'top', 'left'];
                                var mode = $.effects.setMode(el, o.options.mode || 'effect');
                                var direction = o.options.direction || 'up';
                                var distance = o.options.distance || 20;
                                var times = o.options.times || 5;
                                var speed = o.duration || 250;
                                if (/show|hide/.test(mode)) props.push('opacity');
                                $.effects.save(el, props);
                                el.show();
                                $.effects.createWrapper(el);
                                var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
                                var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
                                var distance = o.options.distance || (ref == 'top' ? el.outerHeight({
                                        margin: true
                                }) / 3 : el.outerWidth({
                                        margin: true
                                }) / 3);
                                if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance);
                                if (mode == 'hide') distance = distance / (times * 2);
                                if (mode != 'hide') times--;
                                if (mode == 'show') {
                                        var animation = {
                                                opacity: 1
                                        };
                                        animation[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
                                        el.animate(animation, speed / 2, o.options.easing);
                                        distance = distance / 2;
                                        times--;
                                };
                                for (var i = 0; i < times; i++) {
                                        var animation1 = {},
                                                animation2 = {};
                                        animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
                                        animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
                                        el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing);
                                        distance = (mode == 'hide') ? distance * 2 : distance / 2;
                                };
                                if (mode == 'hide') {
                                        var animation = {
                                                opacity: 0
                                        };
                                        animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
                                        el.animate(animation, speed / 2, o.options.easing, function() {
                                                el.hide();
                                                $.effects.restore(el, props);
                                                $.effects.removeWrapper(el);
                                                if (o.callback) o.callback.apply(this, arguments);
                                        });
                                } else {
                                        var animation1 = {},
                                                animation2 = {};
                                        animation1[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
                                        animation2[ref] = (motion == 'pos' ? '+=' : '-=') + distance;
                                        el.animate(animation1, speed / 2, o.options.easing).animate(animation2, speed / 2, o.options.easing, function() {
                                                $.effects.restore(el, props);
                                                $.effects.removeWrapper(el);
                                                if (o.callback) o.callback.apply(this, arguments);
                                        });
                                };
                                el.queue('fx', function() {
                                        el.dequeue();
                                });
                                el.dequeue();
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.clip = function(o) {
                        return this.queue(function() {
                                var el = $(this),
                                        props = ['position', 'top', 'left', 'height', 'width'];
                                var mode = $.effects.setMode(el, o.options.mode || 'hide');
                                var direction = o.options.direction || 'vertical';
                                $.effects.save(el, props);
                                el.show();
                                var wrapper = $.effects.createWrapper(el).css({
                                        overflow: 'hidden'
                                });
                                var animate = el[0].tagName == 'IMG' ? wrapper : el;
                                var ref = {
                                        size: (direction == 'vertical') ? 'height' : 'width',
                                        position: (direction == 'vertical') ? 'top' : 'left'
                                };
                                var distance = (direction == 'vertical') ? animate.height() : animate.width();
                                if (mode == 'show') {
                                        animate.css(ref.size, 0);
                                        animate.css(ref.position, distance / 2);
                                }
                                var animation = {};
                                animation[ref.size] = mode == 'show' ? distance : 0;
                                animation[ref.position] = mode == 'show' ? 0 : distance / 2;
                                animate.animate(animation, {
                                        queue: false,
                                        duration: o.duration,
                                        easing: o.options.easing,
                                        complete: function() {
                                                if (mode == 'hide') el.hide();
                                                $.effects.restore(el, props);
                                                $.effects.removeWrapper(el);
                                                if (o.callback) o.callback.apply(el[0], arguments);
                                                el.dequeue();
                                        }
                                });
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.drop = function(o) {
                        return this.queue(function() {
                                var el = $(this),
                                        props = ['position', 'top', 'left', 'opacity'];
                                var mode = $.effects.setMode(el, o.options.mode || 'hide');
                                var direction = o.options.direction || 'left';
                                $.effects.save(el, props);
                                el.show();
                                $.effects.createWrapper(el);
                                var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
                                var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
                                var distance = o.options.distance || (ref == 'top' ? el.outerHeight({
                                        margin: true
                                }) / 2 : el.outerWidth({
                                        margin: true
                                }) / 2);
                                if (mode == 'show') el.css('opacity', 0).css(ref, motion == 'pos' ? -distance : distance);
                                var animation = {
                                        opacity: mode == 'show' ? 1 : 0
                                };
                                animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
                                el.animate(animation, {
                                        queue: false,
                                        duration: o.duration,
                                        easing: o.options.easing,
                                        complete: function() {
                                                if (mode == 'hide') el.hide();
                                                $.effects.restore(el, props);
                                                $.effects.removeWrapper(el);
                                                if (o.callback) o.callback.apply(this, arguments);
                                                el.dequeue();
                                        }
                                });
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.explode = function(o) {
                        return this.queue(function() {
                                var rows = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
                                var cells = o.options.pieces ? Math.round(Math.sqrt(o.options.pieces)) : 3;
                                o.options.mode = o.options.mode == 'toggle' ? ($(this).is(':visible') ? 'hide' : 'show') : o.options.mode;
                                var el = $(this).show().css('visibility', 'hidden');
                                var offset = el.offset();
                                offset.top -= parseInt(el.css("marginTop")) || 0;
                                offset.left -= parseInt(el.css("marginLeft")) || 0;
                                var width = el.outerWidth(true);
                                var height = el.outerHeight(true);
                                for (var i = 0; i < rows; i++) {
                                        for (var j = 0; j < cells; j++) {
                                                el.clone().appendTo('body').wrap('<div></div>').css({
                                                        position: 'absolute',
                                                        visibility: 'visible',
                                                        left: -j * (width / cells),
                                                        top: -i * (height / rows)
                                                }).parent().addClass('effects-explode').css({
                                                        position: 'absolute',
                                                        overflow: 'hidden',
                                                        width: width / cells,
                                                        height: height / rows,
                                                        left: offset.left + j * (width / cells) + (o.options.mode == 'show' ? (j - Math.floor(cells / 2)) * (width / cells) : 0),
                                                        top: offset.top + i * (height / rows) + (o.options.mode == 'show' ? (i - Math.floor(rows / 2)) * (height / rows) : 0),
                                                        opacity: o.options.mode == 'show' ? 0 : 1
                                                }).animate({
                                                        left: offset.left + j * (width / cells) + (o.options.mode == 'show' ? 0 : (j - Math.floor(cells / 2)) * (width / cells)),
                                                        top: offset.top + i * (height / rows) + (o.options.mode == 'show' ? 0 : (i - Math.floor(rows / 2)) * (height / rows)),
                                                        opacity: o.options.mode == 'show' ? 1 : 0
                                                },
                                                o.duration || 500);
                                        }
                                }
                                setTimeout(function() {
                                        o.options.mode == 'show' ? el.css({
                                                visibility: 'visible'
                                        }) : el.css({
                                                visibility: 'visible'
                                        }).hide();
                                        if (o.callback) o.callback.apply(el[0]);
                                        el.dequeue();
                                        $('.effects-explode').remove();
                                },
                                o.duration || 500);
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.fold = function(o) {
                        return this.queue(function() {
                                var el = $(this),
                                        props = ['position', 'top', 'left'];
                                var mode = $.effects.setMode(el, o.options.mode || 'hide');
                                var size = o.options.size || 15;
                                var horizFirst = !(!o.options.horizFirst);
                                $.effects.save(el, props);
                                el.show();
                                var wrapper = $.effects.createWrapper(el).css({
                                        overflow: 'hidden'
                                });
                                var widthFirst = ((mode == 'show') != horizFirst);
                                var ref = widthFirst ? ['width', 'height'] : ['height', 'width'];
                                var distance = widthFirst ? [wrapper.width(), wrapper.height()] : [wrapper.height(), wrapper.width()];
                                var percent = /([0-9]+)%/.exec(size);
                                if (percent) size = parseInt(percent[1]) / 100 * distance[mode == 'hide' ? 0 : 1];
                                if (mode == 'show') wrapper.css(horizFirst ? {
                                        height: 0,
                                        width: size
                                } : {
                                        height: size,
                                        width: 0
                                });
                                var animation1 = {},
                                        animation2 = {};
                                animation1[ref[0]] = mode == 'show' ? distance[0] : size;
                                animation2[ref[1]] = mode == 'show' ? distance[1] : 0;
                                wrapper.animate(animation1, o.duration / 2, o.options.easing).animate(animation2, o.duration / 2, o.options.easing, function() {
                                        if (mode == 'hide') el.hide();
                                        $.effects.restore(el, props);
                                        $.effects.removeWrapper(el);
                                        if (o.callback) o.callback.apply(el[0], arguments);
                                        el.dequeue();
                                });
                        });
                };
        })(jQuery);;
        (function($) {
                $.effects.highlight = function(o) {
                        return this.queue(function() {
                                var el = $(this),
                                        props = ['backgroundImage', 'backgroundColor', 'opacity'];
                                var mode = $.effects.setMode(el, o.options.mode || 'show');
                                var color = o.options.color || "#ffff99";
                                var oldColor = el.css("backgroundColor");
                                $.effects.save(el, props);
                                el.show();
                                el.css({
                                        backgroundImage: 'none',
                                        backgroundColor: color
                                });
                                var animation = {
                                        backgroundColor: oldColor
                                };
                                if (mode == "hide") animation['opacity'] = 0;
                                el.animate(animation, {
                                        queue: false,
                                        duration: o.duration,
                                        easing: o.options.easing,
                                        complete: function() {
                                                if (mode == "hide") el.hide();
                                                $.effects.restore(el, props);
                                                if (mode == "show" && jQuery.browser.msie) this.style.removeAttribute('filter');
                                                if (o.callback) o.callback.apply(this, arguments);
                                                el.dequeue();
                                        }
                                });
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.pulsate = function(o) {
                        return this.queue(function() {
                                var el = $(this);
                                var mode = $.effects.setMode(el, o.options.mode || 'show');
                                var times = o.options.times || 5;
                                if (mode == 'hide') times--;
                                if (el.is(':hidden')) {
                                        el.css('opacity', 0);
                                        el.show();
                                        el.animate({
                                                opacity: 1
                                        },
                                        o.duration / 2, o.options.easing);
                                        times = times - 2;
                                }
                                for (var i = 0; i < times; i++) {
                                        el.animate({
                                                opacity: 0
                                        },
                                        o.duration / 2, o.options.easing).animate({
                                                opacity: 1
                                        },
                                        o.duration / 2, o.options.easing);
                                };
                                if (mode == 'hide') {
                                        el.animate({
                                                opacity: 0
                                        },
                                        o.duration / 2, o.options.easing, function() {
                                                el.hide();
                                                if (o.callback) o.callback.apply(this, arguments);
                                        });
                                } else {
                                        el.animate({
                                                opacity: 0
                                        },
                                        o.duration / 2, o.options.easing).animate({
                                                opacity: 1
                                        },
                                        o.duration / 2, o.options.easing, function() {
                                                if (o.callback) o.callback.apply(this, arguments);
                                        });
                                };
                                el.queue('fx', function() {
                                        el.dequeue();
                                });
                                el.dequeue();
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.puff = function(o) {
                        return this.queue(function() {
                                var el = $(this);
                                var options = $.extend(true, {},
                                o.options);
                                var mode = $.effects.setMode(el, o.options.mode || 'hide');
                                var percent = parseInt(o.options.percent) || 150;
                                options.fade = true;
                                var original = {
                                        height: el.height(),
                                        width: el.width()
                                };
                                var factor = percent / 100;
                                el.from = (mode == 'hide') ? original : {
                                        height: original.height * factor,
                                        width: original.width * factor
                                };
                                options.from = el.from;
                                options.percent = (mode == 'hide') ? percent : 100;
                                options.mode = mode;
                                el.effect('scale', options, o.duration, o.callback);
                                el.dequeue();
                        });
                };
                $.effects.scale = function(o) {
                        return this.queue(function() {
                                var el = $(this);
                                var options = $.extend(true, {},
                                o.options);
                                var mode = $.effects.setMode(el, o.options.mode || 'effect');
                                var percent = parseInt(o.options.percent) || (parseInt(o.options.percent) == 0 ? 0 : (mode == 'hide' ? 0 : 100));
                                var direction = o.options.direction || 'both';
                                var origin = o.options.origin;
                                if (mode != 'effect') {
                                        options.origin = origin || ['middle', 'center'];
                                        options.restore = true;
                                }
                                var original = {
                                        height: el.height(),
                                        width: el.width()
                                };
                                el.from = o.options.from || (mode == 'show' ? {
                                        height: 0,
                                        width: 0
                                } : original);
                                var factor = {
                                        y: direction != 'horizontal' ? (percent / 100) : 1,
                                        x: direction != 'vertical' ? (percent / 100) : 1
                                };
                                el.to = {
                                        height: original.height * factor.y,
                                        width: original.width * factor.x
                                };
                                if (o.options.fade) {
                                        if (mode == 'show') {
                                                el.from.opacity = 0;
                                                el.to.opacity = 1;
                                        };
                                        if (mode == 'hide') {
                                                el.from.opacity = 1;
                                                el.to.opacity = 0;
                                        };
                                };
                                options.from = el.from;
                                options.to = el.to;
                                options.mode = mode;
                                el.effect('size', options, o.duration, o.callback);
                                el.dequeue();
                        });
                };
                $.effects.size = function(o) {
                        return this.queue(function() {
                                var el = $(this),
                                        props = ['position', 'top', 'left', 'width', 'height', 'overflow', 'opacity'];
                                var props1 = ['position', 'top', 'left', 'overflow', 'opacity'];
                                var props2 = ['width', 'height', 'overflow'];
                                var cProps = ['fontSize'];
                                var vProps = ['borderTopWidth', 'borderBottomWidth', 'paddingTop', 'paddingBottom'];
                                var hProps = ['borderLeftWidth', 'borderRightWidth', 'paddingLeft', 'paddingRight'];
                                var mode = $.effects.setMode(el, o.options.mode || 'effect');
                                var restore = o.options.restore || false;
                                var scale = o.options.scale || 'both';
                                var origin = o.options.origin;
                                var original = {
                                        height: el.height(),
                                        width: el.width()
                                };
                                el.from = o.options.from || original;
                                el.to = o.options.to || original;
                                if (origin) {
                                        var baseline = $.effects.getBaseline(origin, original);
                                        el.from.top = (original.height - el.from.height) * baseline.y;
                                        el.from.left = (original.width - el.from.width) * baseline.x;
                                        el.to.top = (original.height - el.to.height) * baseline.y;
                                        el.to.left = (original.width - el.to.width) * baseline.x;
                                };
                                var factor = {
                                        from: {
                                                y: el.from.height / original.height,
                                                x: el.from.width / original.width
                                        },
                                        to: {
                                                y: el.to.height / original.height,
                                                x: el.to.width / original.width
                                        }
                                };
                                if (scale == 'box' || scale == 'both') {
                                        if (factor.from.y != factor.to.y) {
                                                props = props.concat(vProps);
                                                el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
                                                el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
                                        };
                                        if (factor.from.x != factor.to.x) {
                                                props = props.concat(hProps);
                                                el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
                                                el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
                                        };
                                };
                                if (scale == 'content' || scale == 'both') {
                                        if (factor.from.y != factor.to.y) {
                                                props = props.concat(cProps);
                                                el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
                                                el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
                                        };
                                };
                                $.effects.save(el, restore ? props : props1);
                                el.show();
                                $.effects.createWrapper(el);
                                el.css('overflow', 'hidden').css(el.from);
                                if (scale == 'content' || scale == 'both') {
                                        vProps = vProps.concat(['marginTop', 'marginBottom']).concat(cProps);
                                        hProps = hProps.concat(['marginLeft', 'marginRight']);
                                        props2 = props.concat(vProps).concat(hProps);
                                        el.find("*[width]").each(function() {
                                                child = $(this);
                                                if (restore) $.effects.save(child, props2);
                                                var c_original = {
                                                        height: child.height(),
                                                        width: child.width()
                                                };
                                                child.from = {
                                                        height: c_original.height * factor.from.y,
                                                        width: c_original.width * factor.from.x
                                                };
                                                child.to = {
                                                        height: c_original.height * factor.to.y,
                                                        width: c_original.width * factor.to.x
                                                };
                                                if (factor.from.y != factor.to.y) {
                                                        child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
                                                        child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
                                                };
                                                if (factor.from.x != factor.to.x) {
                                                        child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
                                                        child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
                                                };
                                                child.css(child.from);
                                                child.animate(child.to, o.duration, o.options.easing, function() {
                                                        if (restore) $.effects.restore(child, props2);
                                                });
                                        });
                                };
                                el.animate(el.to, {
                                        queue: false,
                                        duration: o.duration,
                                        easing: o.options.easing,
                                        complete: function() {
                                                if (mode == 'hide') el.hide();
                                                $.effects.restore(el, restore ? props : props1);
                                                $.effects.removeWrapper(el);
                                                if (o.callback) o.callback.apply(this, arguments);
                                                el.dequeue();
                                        }
                                });
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.shake = function(o) {
                        return this.queue(function() {
                                var el = $(this),
                                        props = ['position', 'top', 'left'];
                                var mode = $.effects.setMode(el, o.options.mode || 'effect');
                                var direction = o.options.direction || 'left';
                                var distance = o.options.distance || 20;
                                var times = o.options.times || 3;
                                var speed = o.duration || o.options.duration || 140;
                                $.effects.save(el, props);
                                el.show();
                                $.effects.createWrapper(el);
                                var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
                                var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
                                var animation = {},
                                        animation1 = {},
                                        animation2 = {};
                                animation[ref] = (motion == 'pos' ? '-=' : '+=') + distance;
                                animation1[ref] = (motion == 'pos' ? '+=' : '-=') + distance * 2;
                                animation2[ref] = (motion == 'pos' ? '-=' : '+=') + distance * 2;
                                el.animate(animation, speed, o.options.easing);
                                for (var i = 1; i < times; i++) {
                                        el.animate(animation1, speed, o.options.easing).animate(animation2, speed, o.options.easing);
                                };
                                el.animate(animation1, speed, o.options.easing).animate(animation, speed / 2, o.options.easing, function() {
                                        $.effects.restore(el, props);
                                        $.effects.removeWrapper(el);
                                        if (o.callback) o.callback.apply(this, arguments);
                                });
                                el.queue('fx', function() {
                                        el.dequeue();
                                });
                                el.dequeue();
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.slide = function(o) {
                        return this.queue(function() {
                                var el = $(this),
                                        props = ['position', 'top', 'left'];
                                var mode = $.effects.setMode(el, o.options.mode || 'show');
                                var direction = o.options.direction || 'left';
                                $.effects.save(el, props);
                                el.show();
                                $.effects.createWrapper(el).css({
                                        overflow: 'hidden'
                                });
                                var ref = (direction == 'up' || direction == 'down') ? 'top' : 'left';
                                var motion = (direction == 'up' || direction == 'left') ? 'pos' : 'neg';
                                var distance = o.options.distance || (ref == 'top' ? el.outerHeight({
                                        margin: true
                                }) : el.outerWidth({
                                        margin: true
                                }));
                                if (mode == 'show') el.css(ref, motion == 'pos' ? -distance : distance);
                                var animation = {};
                                animation[ref] = (mode == 'show' ? (motion == 'pos' ? '+=' : '-=') : (motion == 'pos' ? '-=' : '+=')) + distance;
                                el.animate(animation, {
                                        queue: false,
                                        duration: o.duration,
                                        easing: o.options.easing,
                                        complete: function() {
                                                if (mode == 'hide') el.hide();
                                                $.effects.restore(el, props);
                                                $.effects.removeWrapper(el);
                                                if (o.callback) o.callback.apply(this, arguments);
                                                el.dequeue();
                                        }
                                });
                        });
                };
        })(jQuery);
        (function($) {
                $.effects.transfer = function(o) {
                        return this.queue(function() {
                                var el = $(this);
                                var mode = $.effects.setMode(el, o.options.mode || 'effect');
                                var target = $(o.options.to);
                                var position = el.offset();
                                var transfer = $('<div class="ui-effects-transfer"></div>').appendTo(document.body);
                                if (o.options.className) transfer.addClass(o.options.className);
                                transfer.addClass(o.options.className);
                                transfer.css({
                                        top: position.top,
                                        left: position.left,
                                        height: el.outerHeight() - parseInt(transfer.css('borderTopWidth')) - parseInt(transfer.css('borderBottomWidth')),
                                        width: el.outerWidth() - parseInt(transfer.css('borderLeftWidth')) - parseInt(transfer.css('borderRightWidth')),
                                        position: 'absolute'
                                });
                                position = target.offset();
                                animation = {
                                        top: position.top,
                                        left: position.left,
                                        height: target.outerHeight() - parseInt(transfer.css('borderTopWidth')) - parseInt(transfer.css('borderBottomWidth')),
                                        width: target.outerWidth() - parseInt(transfer.css('borderLeftWidth')) - parseInt(transfer.css('borderRightWidth'))
                                };
                                transfer.animate(animation, o.duration, o.options.easing, function() {
                                        transfer.remove();
                                        if (o.callback) o.callback.apply(el[0], arguments);
                                        el.dequeue();
                                });
                        });
                };
        })(jQuery);
        

